C# 具有多字段和聚合函数的LINQ group by

C# 具有多字段和聚合函数的LINQ group by,c#,linq,C#,Linq,我尝试在LINQ中进行查询,转换以下T-SQL查询: select b.crs, d.epg, d.m, Count (a.sq_rea) as qt from t_aaaa a with (nolock) join t_bbbb b with (nolock) on a.crs = b.crs join t_cccc c with (nolock) on a.spr = c.spr and c.rsp = 1

我尝试在LINQ中进行查询,转换以下T-SQL查询:

select b.crs, 
       d.epg, 
       d.m, 
       Count (a.sq_rea) as qt 
from t_aaaa a with (nolock) 
     join t_bbbb b with (nolock) on a.crs = b.crs 
     join t_cccc c with (nolock) on a.spr = c.spr and c.rsp = 1 
     join v_dddd d with (nolock) on c.epg = d.epg  
Where a.st = 5 
group by b.crs, d.epg, d.m 
但是,我不能像这样使用聚合函数:

   var llstData = (from a in lobjaaaaDao.list()
                   join b in lobjbbbbDao.list() on a.p equals b.p
                   join c in lobjcccc.listar() on a.u equals c.u
                   from d in lobjddddDao.list()
                   where a.w == d.w &&
                         a.st.Equals(5) &&
                         d.Indent == false
                   group a by new { b.xxxx, c.yyyy, c.zzzz } into grp
                   select new 
                   { 
                     grp.Key.xxxx, 
                     grp.Key.yyyy, 
                     grp.Key.zzzz, 
                     total = a.kkkk.Count() // ERROR ON THIS LINE
                   }
                   ).ToList();
我得到这个错误:

当前上下文中不存在名称a


如何修复错误?

在上一个select语句中,您可以访问的查询中的唯一参数是
grp
;每组的位置;每个组由一个键和一个
IEnumerable
表示,在您的示例中:
IEnumerable
。话虽如此,;您可以将行
total=a.kkk.Count()
替换为
total=grp.SelectMany(v=>v.kkk.Count()
total=grp.Sum(a=>a.kkk.Count())
来解决此问题。
这样,
total
表示组中每个a中
kkk
计数的总和。

错误是什么?哦。我现在看到了。等等,让我编辑一下你的作品,让它更明显。编辑。还有,只是一个想法。。。就我个人而言,当我有使用SQL但无法使用LINQ的查询(如您的查询)时,我只是将查询保留在SQL中。您不必使用LINQ。您仍然可以使用t-sql查询并返回您要查找的相同的
列表。LINQ很好,直到它不是。不,它不是一个
KeyValuePair
是一个
i分组
,它是一个
IEnumerable
并且有一个
TKey
Key
属性。因此没有
属性。最后,我不认为有理由在这里执行
SelectMany
,因为它已经分组了,所以计数应该只在
sq\u rea
不为空的行上<代码>总计数(a=>a.sq_rea!=null)@juharr从问题中得出,总数是根据对象a上的一个属性kkk的计数来计算的,这就是为什么我假设OP需要对组中每个项目的kkk计数求和的原因。=>它可以被grp.Sum(a=>a.kkk.Count())
a组替换为。。。into grp
表示
grp
a
行的集合。可能Linq中的
kkk
相当于SQL中的
sq_rea
,因为它们似乎有许多其他名称差异。