gpt4 book ai didi

linq - 在linq联接中使用等于和不等于

转载 作者:行者123 更新时间:2023-12-04 09:41:43 25 4
gpt4 key购买 nike

我正在尝试将以下SQL查询转换为linq;

select Or.Amount, Usr.Name, Usr.Email
from [order] as Or
left join vw_AllUsers as Usr on Usr.UserId = Or.UserId and Usr.RoleName <> 'Admin'

我找不到在同一联接中使用 等于不等于的方法。
如果 Usr.RoleName <>'Admin' Usr.RoleName ='Admin',则linq语句可以这样写
var result =  from Or in context.orders
join Usr in context.vw_AllUsers on
new { userid = Or.UserId, role = "Admin"}
equals
new { userid = Usr.UserId, role = Usr.RoleName}
select ........

或者我可以在部分linq中处理它以获得相同的结果,如下
where !Usr.RoleName.Equals("Admin")

但是可以在linq的join部分中处理此问题吗?

提前致谢

最佳答案

LINQ仅支持相等联接,没有办法在join本身中使用其他运算符。
如您所指出的,您可以只使用where语句来达到相同的效果。如果没有相等比较要加入,则可以使用多个from子句。
From MSDN:

The equals operator


join子句执行等值连接。换句话说,您只能基于两个键的相等性进行匹配。不支持其他类型的比较,例如“大于”或“不等于”。为了清楚表明所有联接都是等联接, join子句使用 equals关键字而不是==运算符。 equals关键字只能在 join子句中使用,它在一个重要方面与==运算符不同。使用 equals,向左键消耗外部源序列,向右键消耗内部源序列。外部源仅在 equals的左侧范围内,内部源序列仅在右侧的范围内。

Non-Equijoins



您可以通过使用多个 from子句将新序列独立地引入到查询中来执行非等值联接,交叉联接和其他自定义联接操作。有关更多信息,请参见 How to: Perform Custom Join Operations (C# Programming Guide)

关于linq - 在linq联接中使用等于和不等于,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10642421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com