如何:計算數值序列中各值的總和
使用 Sum 運算子,可以計算序列中的數值總和。
請注意,LINQ to SQL 中的 Sum
運算子有下列特性:
標準查詢運算子的彙總 (Aggregate) 運算子
Sum
會將空序列或只包含 null 的序列評估為零。 在 LINQ to SQL 中,SQL 的語意 (Semantics) 則不變。 因此,Sum
會將空序列或只包含 null 的序列評估為 null,而不是零。SQL 對中繼結果的限制會套用至 LINQ to SQL 中的彙總。 32 位元整數量值的總和不會用 64 位元的結果來計算,因此進行
Sum
的 LINQ to SQL 轉譯時可能會發生溢位。 即使標準查詢運算子的實作未使對應的記憶體中序列發生溢位,這個可能性還是存在。
範例 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
沒有適用於 short 型別的多載,所以必須轉換 (Cast) 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)