Sdílet prostřednictvím


Určení součtu hodnot v číselné posloupnosti

Sum Operátor slouží k výpočtu součtu číselných hodnot v posloupnosti.

Všimněte si následujících charakteristik operátoru Sum v LINQ to SQL:

  • Agregační operátor standardního operátoru Sum dotazu se vyhodnotí jako nula pro prázdnou sekvenci nebo sekvenci, která obsahuje pouze hodnoty null. V LINQ to SQL zůstávají sémantiky SQL beze změny. Z tohoto důvodu Sum se vyhodnotí jako null místo na nulu pro prázdnou sekvenci nebo pro sekvenci, která obsahuje pouze hodnoty null.

  • Omezení SQL u průběžných výsledků platí pro agregace v LINQ to SQL. Součet 32bitových celočíselných objemů se nevypočítá pomocí 64bitových výsledků a může dojít k přetečení pro překlad SumLINQ to SQL . Tato možnost existuje i v případě, že implementace standardního operátoru dotazu nezpůsobí přetečení odpovídající sekvence v paměti.

Příklad 1

Následující příklad najde celkovou Order přepravu všech objednávek v tabulce.

Pokud tento dotaz spustíte pro ukázkovou databázi Northwind, výstup je: 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)

Příklad 2

Následující příklad najde celkový počet jednotek v objednávce pro všechny produkty.

Pokud tento dotaz spustíte pro ukázkovou databázi Northwind, výstup je: 780.

Všimněte si, že typy přetypování (napříkladUnitsOnOrder) je nutné přetypovatshort, protože Sum nemá přetížení pro krátké typy.

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)

Viz také