Calcular la suma de valores de una secuencia numérica
Utilice el operador Sum para calcular la suma de los valores numéricos de una secuencia.
Tenga en cuenta las características siguientes del operador Sum
en LINQ to SQL:
El operador de consulta estándar de agregado
Sum
se evalúa como cero para una secuencia vacía o una secuencia que solo contiene valores nulos. En LINQ to SQL, la semántica de SQL se mantiene invariable. Por esta razón,Sum
se evalúa como Null en lugar de cero en el caso de secuencias vacías o secuencias que solo contienen valores nulos.En LINQ to SQL se aplican las restricciones de SQL para los agregados en los resultados intermedios. La suma de cantidades enteras de 32 bits no se calcula utilizando resultados de 64 bits, y puede producirse un desbordamiento en la conversión que LINQ to SQL realiza de
Sum
. Esta posibilidad existe aun cuando la implementación del operador de consulta estándar no produzca un desbordamiento para la secuencia en memoria correspondiente.
Ejemplo 1
En el ejemplo siguiente se busca el flete total de todos los pedidos de la tabla Order
.
Si ejecuta esta consulta en la base de datos de ejemplo Northwind, el resultado es: 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)
Ejemplo 2
En el ejemplo siguiente se busca el número total de unidades pedidas para todos los productos.
Si ejecuta esta consulta en la base de datos de ejemplo Northwind, el resultado es: 780
.
Tenga en cuenta que debe convertir los tipos short
(por ejemplo, UnitsOnOrder
) porque Sum
no tiene una sobrecarga para ellos.
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)