Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Use el Sum operador para calcular la suma de valores numéricos en una secuencia.
Tenga en cuenta las siguientes características del Sum operador en LINQ to SQL:
El operador de consulta estándar de agregado
Sumse 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 deja sin cambios. Por este motivo,Sumse evalúa como NULL en lugar de cero para una secuencia vacía o para una secuencia que solo contiene valores NULL.Las limitaciones de SQL en los resultados intermedios se aplican a los agregados de LINQ to SQL. La suma de cantidades de enteros de 32 bits no se calcula mediante el uso de resultados de 64 bits, por lo que puede producirse un desbordamiento en la traducción de LINQ to SQL de
Sum. Esta posibilidad existe incluso si la implementación del operador de consulta estándar no provoca un desbordamiento para la secuencia en memoria correspondiente.
Ejemplo 1
En el ejemplo siguiente se encuentra el total de fletes de todos los pedidos en la tabla Order.
Si ejecuta esta consulta en la base de datos de ejemplo Northwind, la salida 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 encuentra el número total de unidades encargadas para todos los productos.
Si ejecuta esta consulta en la base de datos de ejemplo Northwind, la salida 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)