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ůvoduSum
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
Sum
LINQ 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)