2012-04-20 1 views
9

をグループ化することなく、1つのLINQクエリ内の2つの列の合計を取得します。私は、このT-SQLのLINQ相当をしたい:私は1つのクエリでテーブルの三つの異なる分野を総括したい

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) 
} 

お勧めはありますか?御時間ありがとうございます。 LINQツーSQLであなたが行って、非常に近い取得することができます

+1

「group a by 1 into g」を使用すると、必要なグループを効果なしで適用できます。 – mellamokb

+0

実際には、group by節を導入しないように違いはありますか?クエリはどちらの方法で取得されますか? – Enigmativity

+0

classIdをフィルタリングするときにclassIdをグループ化している理由を教えてください。なぜグループをドロップしないのですか? –

答えて

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

+0

@ user20358あなたは何を見つけましたか? –

9

結局のところ、:

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秒のSELECTに。実行計画の面でも同じである可能性があります。

Entity Frameworkのはまだ0によってはいえ、GROUP BYを作成します。

関連する問題