[英]In LINQ, is join order important for where clause?
我正在创建如下的LINQ语句
from c2 in context.AspNetRoles
join c1 in context.RoleActions
on c2.Id equals c1.RoleId
where c2.UserId == System.Web.HttpContext.Current.User.Identity.GetUserId()
select new { c2.Name };
请注意,c2首先出现。 问题是
c2.UserId
没有表现出智慧。 这是LINQ中的常见行为吗? 我如何解决上面的LINQ语句,顺序很重要?在带有join
where
子句中, join
的最后一个应该有表标识符?
谢谢
如果我对你的了解...
您可以将查询的标准表示法与lambda混合使用。 因此,如果要过滤context.AspNetRoles
然后加入context.RoleAction
,则可以尝试如下操作:
var result = from c2 in context.AspNetRoles.Where(x=>x.Field=="SomeValue"
&& x.UserId == System.Web.HttpContext.Current.User.Identity.GetUserId())
join c1 in context.RoleActions on c2.Id equals c1.RoleId
select new { c2.Name };
如果只需要一个值,为什么要加入? 也许尝试这样的事情:
var result = context.AspNetRoles
.Where(o => context.RoleActions.Any(oo => oo.RoleId == o.Id) &&
o.UserId == System.Web.HttpContext.Current.User.Identity.GetUserId())
.Select(o => o.Name)
.ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.