计算数值序列中值的和

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

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

  • 使用标准查询运算符中的聚合运算符 Sum 计算空序列或只包含 null 的序列时,所得结果为零。 在 LINQ to SQL 中,SQL 的语义保持不变。 因此,使用 Sum 计算空序列或只包含 null 的序列时,所得结果为 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 没有 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)

请参阅