Berechnen der Summe von Werten in einer numerischen Sequenz
Verwenden Sie den Sum-Operator, um die Summe numerischer Werte in einer Sequenz zu berechnen.
Beachten Sie die folgenden Merkmale des Sum
-Operators in LINQ to SQL:
Der
Sum
-Operator für Standardabfragen führt bei einer leeren Sequenz oder bei einer aus Nullen bestehenden Sequenz zum Ergebnis NULL. In LINQ to SQL bleibt die SQL-Semantik unverändert. Aus diesem Grund ergibtSum
bei einer leeren Sequenz oder bei einer aus Nullen bestehenden Sequenz den Wert NULL an Stelle von 0.SQL-Einschränkungen für Zwischenergebnisse gelten in LINQ to SQL für Aggregate. Die Summe von 32-Bit-Ganzzahlen wird nicht mithilfe von 64-Bit-Ergebnissen berechnet, und bei der LINQ to SQL-Übersetzung von
Sum
kann es zu einem Überlauf kommen. Dies kann ggf. auch eintreten, wenn die standardmäßige Implementierung des Abfrageoperators bei der entsprechenden Sequenz im Arbeitsspeicher nicht zu einem Überlauf führt.
Beispiel 1
Im folgenden Beispiel wird die gesamte Fracht zu allen Bestellungen in der Tabelle Order
ermittelt.
Wenn Sie diese Abfrage mit der Beispieldatenbank Northwind ausführen, lautet die Ausgabe 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)
Beispiel 2
Im folgenden Beispiel wird die Gesamtzahl von bestellen Einheiten für alle Produkte ermittelt.
Wenn Sie diese Abfrage mit der Beispieldatenbank Northwind ausführen, lautet die Ausgabe 780
.
Beachten Sie, dass Sie short
-Typen (z. B. UnitsOnOrder
) verwenden müssen, da Sum
nicht über einen Überlauf für diese Typen verfügt.
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)