2008-09-15 22 views
67

Używając LINQ do SQL, mam klasę Order z kolekcją OrderDetails. Szczegóły zamówienia mają właściwość o nazwie LineTotal, która pobiera Qnty x ItemPrice.Suma pozycji w kolekcji

Wiem, jak wykonać nowe zapytanie LINQ bazy danych, aby znaleźć sumę zamówienia, ale ponieważ mam już kolekcję OrderDetails od DB, istnieje prosta metoda zwracania sumy LineTotal bezpośrednio z kolekcja?

Chciałbym dodać sumę zamówienia jako własność mojej klasy zamówień. Wyobrażam sobie, że mógłbym przejrzeć kolekcję i obliczyć sumę za każdy Order.OrderDetail, ale zgaduję, że jest lepszy sposób.

Odpowiedz

151

Można zrobić LINQ to Objects oraz wykorzystanie LINQ do obliczania sum:

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

Można również użyć wyrażenia lambda do tego, który jest nieco "czystszy" zrobić.

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

można następnie podłączyć to do swojego zamówienia klasy tak, jeśli chcesz:

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