Dim lista As New List(Of Object) lista.Add(New With {.ANIO = 2014, .NUMERO = "1521", .SUELDO = 10}) lista.Add(New With {.ANIO = 2015, .NUMERO = "1521", .SUELDO = 20}) lista.Add(New With {.ANIO = 2015, .NUMERO = "1522", .SUELDO = 5}) lista.Add(New With {.ANIO = 2015, .NUMERO = "1522", .SUELDO = 5})
Caso 1: Agrupación por solo un campo + operador adicional
en el siguiente ejemplo se obtiene la suma de "Sueldos" por año.
Dim p1 = lista.GroupBy(Function(g) g.ANIO).Select(Function(a) New With {.numero = a.Key, .sum = a.Sum(Function(p) p.SUELDO)}).ToList
Caso 2: Agrupación por varios campos + operador adicional
en el siguiente ejemplo se obtiene la suma de "Sueldos" por año y número.
Dim p2 = lista.GroupBy(Function(g) New With {Key g.ANIO, Key g.NUMERO}). _ Select(Function(a) New With {.anio = a.Key.ANIO, .num = a.Key.NUMERO, .sum = a.ToList.Sum(Function(p) p.SUELDO)}).ToList
Caso 3: Uso de GroupBy como reemplazo del Distinct
el siguiente ejemplo aplica el distinct sobre el campo: "ANIO":
Dim p3 = lista.GroupBy(Function(g) g.ANIO).Select(Function(a) a.First).ToList
en caso se tenga se tenga que aplicar varios campos se utilizará lo siguiente:
Dim p4 = lista.GroupBy(Function(g) g.ANIO And g.NUMERO).Select(Function(a) a.First).ToList
Saludos