Partilhar via


Calcular a soma dos valores em uma sequência numérica

Use o Sum operador para calcular a soma dos valores numéricos em uma sequência.

Observe as seguintes características do Sum operador no LINQ to SQL:

  • O operador Sum de agregação Operador de Consulta Padrão é avaliado como zero para uma sequência vazia ou uma sequência que contém apenas nulos. 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 apenas nulos.

  • As limitações do SQL em resultados intermediários aplicam-se a agregações em LINQ to SQL. A soma de quantidades inteiras de 32 bits não é calculada usando resultados de 64 bits e pode ocorrer estouro para a tradução LINQ to SQL de Sum. Essa possibilidade existe mesmo se a implementação do Operador de Consulta Padrão não causar 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 Order tabela.

Se você executar essa consulta no banco de dados de exemplo 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 encomendadas para todos os produtos.

Se você executar essa consulta no banco de dados de exemplo Northwind, a saída será: 780.

Observe que você deve transmitir short tipos (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)

Consulte também