我想在一个查询中总结一个表的三个不同字段。我想要一个这个T-SQL的linq等价物:
select sum(fld1), SUM(fld2), SUM(fld3) from MyTable where classID = 5
我发现的所有示例要么使用分组,要么多次调用查询,每个字段需要总结一次。
我现在有类似的东西。但是我不想在它的T-SQL表单中添加group by子句。
from a in MyTable
where a.classID == 5
group a by a.classID into g
select new
{
Sumfld1 = g.Sum(x => x.fld1 ),
Sumfld2 = g.Sum(x => x.fld2),
Sumfld3 = g.Sum(x => x.fld3)
}
有什么建议吗?谢谢你的时间。
答案 0 :(得分:11)
事实证明,在linq-to-sql中你可以通过以下方式非常接近:
from a in MyTable
where a.classID == 5
group a by 0 into g
select new
{
Sumfld1 = g.Sum(x => x.fld1),
Sumfld2 = g.Sum(x => x.fld2),
Sumfld3 = g.Sum(x => x.fld3)
}
(请注意 0 组)
它不会转换为sql GROUP BY
,而是从子查询转换为多个SELECT
的{{1}}。就执行计划而言,它甚至可能是相同的。
实体框架仍会创建SUM
,尽管是GROUP BY
。
答案 1 :(得分:0)
var x = from a in MyTable
where a.classID == 5
select a;
int? Sumfld1 = x.Sum(y => y.fld1);
int? Sumfld2 = x.Sum(y => y.fld2);
int? Sumfld3 = x.Sum(y => y.fld3);