Freigeben über


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 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 ergibt Sum 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)

Siehe auch