如何避免在这个LINQ中重复语句的某些部分

如何避免在这个LINQ中重复语句的某些部分,linq,Linq,语句的这一部分g.Where(gu=>gu.Role==1),我如何避免重复呢?您可以尝试更新委托 比如说 User.Where(u => new int[]{1,2}.Contains(u.Org_id)).GroupBy(u => u.Org_id) .Select(g => new {GroupId = g.Key, UserCount = g.Where(gu => gu.Role == 1).Count(), Users = g.Where(gu =>

语句的这一部分
g.Where(gu=>gu.Role==1)
,我如何避免重复呢?

您可以尝试更新委托

比如说

User.Where(u => new int[]{1,2}.Contains(u.Org_id)).GroupBy(u => u.Org_id)
.Select(g => new {GroupId = g.Key, UserCount =  g.Where(gu => gu.Role == 1).Count(), Users = g.Where(gu => gu.Role == 1)})
.Take(500)

选项1:不存储计数(它是冗余的):

备选方案2:项目两次:

User.Where(u => new int[]{1,2}.Contains(u.Org_id))
    .GroupBy(u => u.Org_id)
    .Select(g => new {GroupId = g.Key, Users = g.Where(gu => gu.Role == 1).ToList()})
    .Take(500)

将GroupBy的where out和after移出不存储
Count()
,在结果上调用
ToList()
,然后就有了列表和
Count
。或者,将列表投影两次,一次投影到Key和Role=1的用户,然后再投影到所需的结果。@Nkosi它需要在GroupBy()之前直接对用户进行操作,如果这样做,则不会得到空集结果(count=0)。@IanMercer yes,我最终意识到,当我仔细考虑后,
类型'System.Collections.Generic.List
1[LINQPad.User.User]'的表达式不是一个序列`但是如果我删除这个
UserCount=x.Users.Count
查询成功,但没有成功UserCount@HeeroYuy林帕德问题?在.NET Fiddle中运行良好:这很有效,但我必须在GroupBy之后添加
.AsEnumerable()
,谢谢
User.Where(u => new int[]{1,2}.Contains(u.Org_id))
    .GroupBy(u => u.Org_id)
    .Select(g => new {GroupId = g.Key, Users = g.Where(gu => gu.Role == 1).ToList()})
    .Take(500)
User.Where(u => new int[]{1,2}.Contains(u.Org_id))
    .GroupBy(u => u.Org_id)
    .Select(g => new {GroupId = g.Key, Users = g.Where(gu => gu.Role == 1).ToList()})
    .Select(x => new {GroupId = x.GroupId, Users = x.Users, UserCount = x.Users.Count})
    .Take(500)