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