次の方法で共有


数値シーケンス内の値の合計を計算する

Sum演算子を使用して、シーケンス内の数値の合計を計算します。

LINQ to SQL の Sum 演算子の次の特性に注意してください。

  • 標準クエリ演算子の集計演算子 Sum は、空のシーケンスまたは null のみを含むシーケンスに対して 0 に評価されます。 LINQ to SQL では、SQL のセマンティクスは変更されません。 このため、 Sum は、空のシーケンスまたは null のみを含むシーケンスに対して、0 ではなく null に評価されます。

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

例 1

次の例では、 Order テーブル内のすべての注文の合計運送料を検索します。

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

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

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

Console.WriteLine(totalFreight)

例 2

次の例では、すべての製品の注文の合計単位数を検索します。

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

shortには短い型のオーバーロードがないため、UnitsOnOrder型 (Sum など) をキャストする必要があることに注意してください。

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

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

Console.WriteLine(totalUnitsOnOrder)

こちらも参照ください