使用 Sum 运算符可以计算序列中数值的和。
请注意 LINQ to SQL 中 Sum 运算符的以下特征:
使用标准查询运算符中的聚合运算符 Sum 计算空序列或只包含 null 的序列时,所得结果为零。 在 LINQ to SQL 中,SQL 的语义保持不变。 因此,使用 Sum 计算空序列或只包含 null 的序列时,所得结果为 null 而非零。
针对中间结果的 SQL 限制适用于 LINQ to SQL 中的聚合。 32 位整型量之和不是使用 64 位结果计算的,且在 LINQ to SQL 转换 Sum 时可能会发生溢出。 即使对于内存中的对应序列,标准查询运算符的实现不会造成溢出,仍存在这种可能性。
示例
下面的示例查找 Order 表中所有订单的总运费。
如果您对 Northwind 示例数据库运行此查询,则输出为:64942.6900。
Dim totalFreight = Aggregate ord In db.Orders _
Into Sum(ord.Freight)
Console.WriteLine(totalFreight)
System.Nullable<Decimal> totalFreight =
(from ord in db.Orders
select ord.Freight)
.Sum();
Console.WriteLine(totalFreight);
下面的示例查找所有产品总的订购件数。
如果您对 Northwind 示例数据库运行此查询,则输出为:780。
请注意,您必须对 short 类型(例如,UnitsOnOrder)进行强制转换,因为 Sum 没有 short 类型的重载。
Dim totalUnitsOnOrder = Aggregate prod In db.Products _
Into Sum(prod.UnitsOnOrder)
Console.WriteLine(totalUnitsOnOrder)
System.Nullable<long> totalUnitsOnOrder =
(from prod in db.Products
select (long)prod.UnitsOnOrder)
.Sum();
Console.WriteLine(totalUnitsOnOrder);