2009-11-23 5 views
16

w VB.NET, załóżmy mam następującą strukturę:VB.NET LINQ Zapytanie: Pierwsze suma wszystkich wartości dla określonej struktury państw

Public Structure Product 
    Public ItemNo As Int32 
    Public Description As String 
    Public Cost As Decimal 
End Structure 

... i Generic Lista Produktów :

Dim ProductsList As New List(Of Product) 

Dim product1 As New Product 

With product1 
    .ItemNo = 100 
    .Description = "Standard Widget" 
    .Cost = 10D 
End With 

ProductsList.Add(product1) 

Dim product2 As New Product 

With product2 
    .ItemNo = 101 
    .Description = "Standard Cog" 
    .Cost = 10.95D 
End With 

ProductsList.Add(product2) 

Dim product3 As New Product 

With product3 
    .ItemNo = 101 
    .Description = "Industrial Strenght Sprocket" 
    .Cost = 99.95D 
End With 

ProductsList.Add(product3) 

Jak zdefiniować kwerendę LINQ do sumowania wszystkich wartości Product.Cost na liście? Innymi słowy, jaka byłaby kwerenda LINQ w VB.NET, aby zwrócić wartość 120,90, która odzwierciedla sumę wszystkich trzech wartości kosztu produktu w pojedynczym kwerendzie LINQ?

Odpowiedz

33

Wbudowana metoda Sum już to robi.

W VB wygląda to tak:

ProductList.Sum(Function(item) item.Cost) 

W języku C# wygląda następująco:

ProductsList.Sum((item) => item.Cost); 
+6

podejście VB: ProductList.Sum (Funkcja (x) x.Cost) – Nathan

+0

Wielkie dzięki zarówno McKay, Nathan, jak i eidylon za poświęcony czas i pomoc. Wszystkie odpowiedzi były na miejscu i pracowały dla mnie. Twoje odpowiedzi były o wiele łatwiejsze do odczytania, zrozumienia i implementacji niż próba użycia zdemontowanego kodu, który pierwotnie zaimplementowałem oceniony w języku C#. {:-P Jeśli chcesz, możesz opublikować demontaż z .NET Reflector. Chociaż oba podejścia są logiczne i semantyczne tożsame, składnia kodu emitowanego przez oba jest nieco inna i sprawia, że ​​czytanie jest interesujące. Jeszcze raz, wielkie dzięki ... – ClockEndGooner

+0

Dzięki! Nie mogłem dowiedzieć się, co to było>> w .... składnia vb ma więcej sensu. –

3

Jednym ze sposobów byłoby:

Dim s = (From p As Product In products Select p.Cost).Sum() 
Powiązane problemy