繁体   English   中英

在LINQ中,连接顺序对于where子句重要吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM