Ada*_*ght 7 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'
Run Code Online (Sandbox Code Playgroud)
我找不到在同一个连接中使用相等和不相等的方法..如果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 ........
Run Code Online (Sandbox Code Playgroud)
或者我可以在linq的部分处理它以得到相同的结果,如下所示
where !Usr.RoleName.Equals("Admin")
Run Code Online (Sandbox Code Playgroud)
但是有可能在linq的连接部分处理这个问题吗?
提前致谢
bdu*_*kes 11
LINQ只支持相等连接,没有办法在join
自身中使用不同的运算符.
正如您所指出的,您可以使用一个where
语句来获得相同的效果.如果您没有进行相等比较,则可以使用多个from
子句.
该
equals
运营商甲
join
子句执行同等联接.换句话说,您只能基于两个键相等的匹配.不支持其他类型的比较,例如"大于"或"不等于".要明确所有连接都是equijoins,该join
子句使用equals
关键字而不是==运算符.的equals
关键字可以仅在使用join
条款和它从在一个重要方式==操作符不同.使用时equals
,左键消耗外部源序列,右键消耗内部源.外部源仅位于左侧的范围内,equals
而内部源序列仅位于右侧的范围内.非等值连接
您可以使用多个
from
子句将新序列独立地引入查询,从而执行非等值连接,交叉连接和其他自定义连接操作.有关更多信息,请参见如何:执行自定义连接操作(C#编程指南).
不等于加入可以实现,如,
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 ........
Run Code Online (Sandbox Code Playgroud)
上面的linq的sql等价物在连接条件中会有一个case语句.
归档时间: |
|
查看次数: |
18304 次 |
最近记录: |