2012-04-20 26 views
9

我要总结表的三个不同领域中的一个查询。我想一个LINQ相当于这个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) 
} 

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

+1

您可以通过1使用'组到g'用没有影响到申请必要的组。 – mellamokb 2012-04-20 03:56:48

+0

不介绍group by子句是否真的有实际区别?查询需要多长时间? – Enigmativity 2012-04-20 04:30:01

+0

当你在classId上过滤时,你为什么要在classId上分组?为什么不放弃团队? – 2012-04-20 06:14:33

回答

1
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); 
+2

这看起来像它会调用每个x.Sum(..)var X中的查询将尝试它并报告回来。谢谢。 – user20358 2012-04-20 06:51:54

+0

@ user20358你发现了什么? – 2017-04-20 22:07:24

9

事实证明,在LINQ到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) 
} 

(注意到组)

它不翻译到SQL GROUP BY,但多从子查询SUM s的SELECT。在执行计划方面,它甚至可能是相同的。

实体框架还创建了一个GROUP BY,虽然通过0