共用方式為


如何:計算數值序列中各值的總和

使用 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)

另請參閱