De som van waarden berekenen in een numerieke reeks
Gebruik de Sum operator om de som van numerieke waarden in een reeks te berekenen.
Let op de volgende kenmerken van de Sum
operator in LINQ naar SQL:
De statistische operator
Sum
Standard Query Operator evalueert naar nul voor een lege reeks of een reeks die alleen null-waarden bevat. In LINQ naar SQL blijven de semantiek van SQL ongewijzigd.Sum
Daarom wordt null geƫvalueerd in plaats van nul voor een lege reeks of voor een reeks die alleen null-waarden bevat.SQL-beperkingen voor tussenliggende resultaten zijn van toepassing op aggregaties in LINQ naar SQL. De som van 32-bits gehele getallen wordt niet berekend met behulp van 64-bits resultaten en overloop kan optreden voor de LINQ naar SQL-vertaling van
Sum
. Deze mogelijkheid bestaat zelfs als de implementatie van de Standard-queryoperator geen overloop veroorzaakt voor de bijbehorende in-memory-reeks.
Voorbeeld 1
In het volgende voorbeeld wordt de totale vracht van alle orders in de Order
tabel gevonden.
Als u deze query uitvoert op de northwind-voorbeelddatabase, is de uitvoer: 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)
Voorbeeld 2
In het volgende voorbeeld wordt het totale aantal eenheden op bestelling voor alle producten gevonden.
Als u deze query uitvoert op de northwind-voorbeelddatabase, is de uitvoer: 780
.
Houd er rekening mee dat u typen moet casten short
(bijvoorbeeld UnitsOnOrder
) omdat Sum
er geen overbelasting is voor korte typen.
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)