Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 Aggregatoperator des Standardabfrageoperators
Sum
wertet für eine leere Sequenz oder eine Sequenz, die nur NULL-Werte enthält, auf Null aus. In LINQ to SQL bleiben die Semantik von SQL 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 für Aggregate in LINQ to SQL. Die Summe von 32-Bit-Ganzzahlen wird nicht durch 64-Bit-Ergebnisse berechnet, und ein Überlauf kann in der LINQ to SQL-Übersetzung von
Sum
auftreten. Diese Möglichkeit besteht auch dann, wenn die Implementierung des Standardabfrageoperators keinen Überlauf für die entsprechende In-Memory-Sequenz verursacht.
Beispiel 1
Im folgenden Beispiel wird die Gesamtfracht aller Bestellungen in der Order
Tabelle gefunden.
Wenn Sie diese Abfrage für die Northwind-Beispieldatenbank 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 Gesamtanzahl der bestellten Einheiten aller Produkte ermittelt.
Wenn Sie diese Abfrage für die Northwind-Beispieldatenbank 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)