2009-11-23 13 views
16

En VB.NET, vamos a suponer que tienen la siguiente estructura:VB.NET LINQ consulta: Conseguir la suma de todos los valores para una estructura específica miembro

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

... y una lista genérica de los productos :

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) 

¿Cómo definiría una consulta LINQ para sumar todos los valores de Product.Cost en la lista? En otras palabras, ¿cuál sería la consulta LINQ en VB.NET para devolver el valor 120.90, que refleja la suma de los tres valores del Costo del producto en una sola consulta LINQ?

Respuesta

33

El método integrado en Sum ya lo hace.

En VB se parece a esto:

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

En C# que se parece a esto:

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

enfoque de VB: ProductList.Sum (Función (x) x.Cost) – Nathan

+0

Muchas gracias a McKay, Nathan y eidylon por su tiempo y ayuda. Todas las respuestas fueron acertadas y funcionó para mí. Sus respuestas fueron mucho más fáciles de leer, comprender e implementar que tratar de usar código desensamblado que originalmente implementé evaluado en C#. {:-P Si desea publicar el desmontaje desde .NET Reflector. Aunque ambos enfoques son lógicamente y semánticamente iguales, la sintaxis para el código emitido por ambos es ligeramente diferente y resulta interesante. De nuevo, muchas gracias ... – ClockEndGooner

+0

¡Gracias! No pude entender qué era el => en C# ... la sintaxis vb tiene más sentido imo. –

3

Una forma sería:

Dim s = (From p As Product In products Select p.Cost).Sum() 
Cuestiones relacionadas