Calcular a soma dos valores em uma sequência numérica
Use o operador Sum para calcular a soma de valores numéricos em uma sequência.
Observe as seguintes características do operador Sum
no LINQ to SQL:
O operador de agregação do operador de consulta padrão
Sum
avalia uma sequência vazia ou uma sequência que contém somente nulos como zero. No LINQ to SQL, a semântica do SQL é deixada inalterada. Por esse motivo,Sum
avalia como nulo em vez de zero para uma sequência vazia ou para uma sequência que contém somente nulos.As limitações do SQL em resultados intermediários se aplicam às agregações no LINQ to SQL. A soma de quantidades de inteiros de 32 bits não é computada usando resultados de 64 bits, e o estouro pode ocorrer para a tradução do LINQ to SQL de
Sum
. Essa possibilidade existe mesmo se a implementação do operador de consulta padrão não causa um estouro para a sequência correspondente na memória.
Exemplo 1
O exemplo a seguir localiza o frete total de todos os pedidos na tabela Order
.
Se você executar essa consulta no banco de dados de exemplo do Northwind, a saída será: 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)
Exemplo 2
O exemplo a seguir localiza o número total de unidades no pedido para todos os produtos.
Se você executar essa consulta no banco de dados de exemplo do Northwind, a saída será: 780
.
Observe que você deve converter tipos short
(por exemplo, UnitsOnOrder
) porque Sum
não tem sobrecarga para tipos curtos.
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)