次の方法で共有


方法 : 数値のシーケンスの合計を計算する (LINQ to SQL)

更新 : November 2007

Sum 演算子を使用すると、シーケンス内の数値の合計を計算できます。

LINQ to SQL の Sum 演算子には、次の特性があります。

  • 標準クエリ演算子の集計演算子 Sum では、空のシーケンスや null のみを含むシーケンスはゼロに評価されます。LINQ to SQL では、SQL のセマンティクスは維持されます。したがって、空のシーケンスまたは null のみを含むシーケンスについては、Sum 演算子は 0 ではなく null に評価します。

  • LINQ to SQL での集計には、中間結果に対する SQL の制限が適用されます。64 ビットの結果を使って 32 ビット整数の合計値を計算することはできません。LINQ to SQL による Sum の変換で、オーバーフローが発生する可能性があります。これは、標準クエリ演算子の実装で、対応するメモリ内シーケンスでオーバーフローが発生しない場合でも起こる可能性があります。

使用例

Order テーブルに含まれるすべての注文の運賃の合計を求める例を次に示します。

Northwind サンプル データベースに対してこのクエリを実行した場合の出力は、64942.6900 です。

Dim totalFreight = Aggregate ord In db.Orders _
                   Into Sum(ord.Freight)

Console.WriteLine(totalFreight)
System.Nullable<Decimal> totalFreight =
    (from ord in db.Orders
    select ord.Freight)
    .Sum();

Console.WriteLine(totalFreight);

すべての製品の受注単位の合計を求める例を次に示します。

Northwind サンプル データベースに対してこのクエリを実行した場合の出力は、780 です。

Sum には short 型のオーバーロードがないため、short 型 (UnitsOnOrder など) をキャストする必要があります。

Dim totalUnitsOnOrder = Aggregate prod In db.Products _
                        Into Sum(prod.UnitsOnOrder)

Console.WriteLine(totalUnitsOnOrder)
System.Nullable<long> totalUnitsOnOrder =
    (from prod in db.Products
    select (long)prod.UnitsOnOrder)
    .Sum();

Console.WriteLine(totalUnitsOnOrder);

参照

概念

サンプル データベースのダウンロード (LINQ to SQL)

その他の技術情報

集計クエリ (LINQ to SQL)