2008-09-15 13 views
67

Mit LINQ to SQL habe ich eine Order-Klasse mit einer Auflistung von OrderDetails. Die Auftragsdetails haben eine Eigenschaft namens LineTotal, die Qnty x ItemPrice erhält.Summe der Elemente in einer Sammlung

Ich weiß, wie man eine neue LINQ-Abfrage der Datenbank, um die Bestellsumme zu finden, aber da ich bereits die Sammlung von OrderDetails aus der DB habe, gibt es eine einfache Methode, die Summe des LineTotal direkt aus der Sammlung?

Ich möchte die Bestellsumme als eine Eigenschaft meiner Klasse Bestellung hinzufügen. Ich stelle mir vor, ich könnte die Sammlung durchschleifen und die Summe mit einer für jede Order.OrderDetail berechnen, aber ich vermute, es gibt einen besseren Weg.

Antwort

151

Sie können LINQ to Objects tun und die Verwendung von LINQ die Summen zu berechnen:

decimal sumLineTotal = (from od in orderdetailscollection 
select od.LineTotal).Sum(); 

Sie auch Lambda-Ausdrücke, dies zu tun können, was etwas "sauberer" ist.

decimal sumLineTotal = orderdetailscollection.Sum(od => od.LineTotal); 

Sie können dies dann haken diese bis zu Ihrer Order-Klasse wie wenn Sie wollen:

Public Partial Class Order { 
    ... 
    Public Decimal LineTotal { 
    get { 
     return orderdetailscollection.Sum(od => od.LineTotal); 
    } 
    } 
}