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)