Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在linq联接中使用equal和not equal_Linq_Entity Framework - Fatal编程技术网

在linq联接中使用equal和not equal

在linq联接中使用equal和not equal,linq,entity-framework,Linq,Entity Framework,我正在尝试将以下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' 或者我可以在linq的何处处理它,以获得相同的结果,如下所示 where !Usr.RoleName.Equals("Admin") 但有可能在linq的join

我正在尝试将以下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'
或者我可以在linq的何处处理它,以获得相同的结果,如下所示

where !Usr.RoleName.Equals("Admin")
但有可能在linq的join部分处理这个问题吗


提前感谢

LINQ只支持相等联接,在
联接
本身中没有使用其他运算符的方法

正如您所指出的,您可以使用
where
语句来实现相同的效果。如果您没有要加入的相等比较,则可以使用多个
from
子句

:

等于
运算符


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

非等距连接



通过使用多个
from
子句将新序列独立地引入到查询中,可以执行非等联接、交叉联接和其他自定义联接操作。有关更多信息,请参阅。

可以实现如下不相等的连接:

var result =  from Or in context.orders
          join Usr in context.vw_AllUsers on 
          new { userid = Or.UserId, IsNotAnAdmin = true}
          equals
          new { userid = Usr.UserId, IsNotAnAdmin = (Usr.RoleName != "Admin") }
          select ........

上述linq的sql等价物将在连接条件中有一个case语句。

可能重复的@nawfal不是重复的,这个问题是关于在同一个查询中同时使用equal和not equal。这真是一个难题,但是,我喜欢这种创造性。似乎EF应该内置这样简单的东西。
var result =  from Or in context.orders
          join Usr in context.vw_AllUsers on 
          new { userid = Or.UserId, IsNotAnAdmin = true}
          equals
          new { userid = Usr.UserId, IsNotAnAdmin = (Usr.RoleName != "Admin") }
          select ........