计算数值序列中的值总和

使用 Sum 运算符计算序列中数值的总和。

请注意 LINQ to SQL 中运算符的 Sum 以下特征:

  • 对于空序列或仅包含 null 的序列,标准查询运算符聚合运算符 Sum 的计算结果为零。 在 LINQ to SQL 中,SQL 的语义保持不变。 因此,对于空序列或仅包含 null 的序列, Sum 计算结果为 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 类型(例如,UnitsOnOrder)进行强制转换,因为 Sum 没有 short 类型的重载。

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)

另请参阅