在一个LINQ查询中获取两列的总和而不进行分组

时间:2012-04-20 03:49:34

标签: linq entity-framework linq-to-sql

我想在一个查询中总结一个表的三个不同字段。我想要一个这个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)
}

有什么建议吗?谢谢你的时间。

2 个答案:

答案 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);