在LINQ中使用SUM与GroupBy:SQL分组查询转LINQ实现咨询
完整LINQ实现方案
嘿,我来帮你补全这段LINQ代码,完美对应你给出的SQL查询和SpecialClass定义:
var result = db.YTDTRNS // 对应SQL中的 GROUP BY ORDNO,CURR,用匿名类型作为分组键 .GroupBy(y => new { y.ORDNO, y.CURR }) // 将分组结果投影到你的SpecialClass类中 .Select(group => new SpecialClass { ORDNO = group.Key.ORDNO, CURR = group.Key.CURR, // 对应SQL中的 SUM(AMOUNT) as SUMMEDAMT SUMMEDAMT = group.Sum(item => item.AMOUNT) }) // 可选:如果需要立即执行查询并得到内存中的集合,加上ToList() .ToList();
关键细节说明:
- 分组逻辑:用匿名类型
new { y.ORDNO, y.CURR }作为分组键,和SQL里多字段分组的逻辑完全一致,EF会自动将其转换成对应的GROUP BY子句。 - 聚合与投影:在
Select方法中,我们从分组对象(group)里获取分组键的值,再用Sum方法计算分组内所有AMOUNT的总和,最后映射到SpecialClass的对应属性上。 - 执行时机:如果不需要立即获取结果,可以去掉
.ToList(),保持IQueryable<SpecialClass>类型,这样查询会延迟到实际使用数据时才执行。
内容的提问来源于stack exchange,提问作者questionMarks
相关产品推荐
相关产品推荐

