计算数值序列中值的和
使用 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)