12

1 つのクエリでテーブルの 3 つの異なるフィールドを合計したいと考えています。この T-SQL に相当する linq が必要です。

select sum(fld1), SUM(fld2),  SUM(fld3)   from MyTable where classID = 5

私が見つけたすべての例では、グループ化を使用するか、合計する必要があるフィールドごとに 1 回、クエリを複数回呼び出します。

私は今、このようなものを持っています。しかし、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)
}

助言がありますか?御時間ありがとうございます。

4

2 に答える 2

13

結局のところ、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の複数のsに変換されます。SUM実行計画に関しては、同じかもしれません。

Entity Frameworkは、によってではありますがGROUP BY、それでもを作成し0ます。

于 2012-04-20T13:26:52.873 に答える
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);
于 2012-04-20T06:09:51.350 に答える