2012-04-20 24 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