如何避免在这个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)