2009-11-23 3 views
16

En VB.NET, supposons que je la structure suivante:VB.NET requête LINQ: Obtenir la somme de toutes les valeurs d'une structure spécifique Membre

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

... et une liste générique des produits :

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) 

Comment pourrais-je définir une requête LINQ à la somme de toutes les valeurs Product.Cost dans la liste? En d'autres termes, quelle serait la requête LINQ dans VB.NET pour renvoyer la valeur 120.90, qui reflète la somme des trois valeurs de coût de produit dans une seule requête LINQ?

Répondre

33

La méthode Sum intégrée le fait déjà.

En VB, il ressemble à ceci:

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

En C#, il ressemble à ceci:

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

approche de VB: ProductList.Sum (Fonction (x) x.Cost) – Nathan

+0

Un grand merci à McKay, Nathan et eidylon pour votre temps et votre aide. Toutes les réponses étaient sur place et ont fonctionné pour moi. Vos réponses étaient beaucoup plus faciles à lire, à comprendre et à implémenter que d'essayer d'utiliser du code désassemblé que j'ai initialement implémenté évalué en C#. {:-P Si vous souhaitez pouvoir publier le démontage à partir de .NET Reflector. Bien que les deux approches soient logiquement et sémantiquement les mêmes, la syntaxe pour le code émis par les deux est légèrement différente et rend la lecture intéressante. Encore une fois, merci beaucoup ... – ClockEndGooner

+0

Merci! Je ne pouvais pas comprendre ce que le => était dans C# .... la syntaxe vb a plus de sens imo. –

3

Une façon serait:

Dim s = (From p As Product In products Select p.Cost).Sum() 
Questions connexes