Pregunta
class Category
{
public string Name { get; set; }
public int Count { get; set;}
}
Name Count
AA 2
BB 3
AA 4
Tengo una IEnumerable<Category>
y le gustaría obtener una lista de categorías con nombres únicos y la suma de múltiples entradas
Salida
Name Count
AA 6
BB 3
Actualizar
class Category
{
public string Name { get; set; }
public int CountA { get; set;}
public int CountB { get; set;}
public string Phone { get; set;}
}
¿Cómo podría resumir dos columnas. y la columna de teléfono puede ser la última fila o cualquier fila
Solución
var foo = new List<Category>() {
new Category() { Name = "AA", Count = 2},
new Category() { Name = "BB", Count = 3},
new Category() { Name = "AA", Count = 4}
};
var bar = foo.GroupBy(c => c.Name).Select(g => new Category(){ Name = g.Key, Count = g.Sum(c => c.Count) });
Otros consejos
Su pregunta actualizada no está del todo claro en términos del número de teléfono, pero sospecho que desea algo como:
var query = from category in list
group category by category.Name into grouped
select new { Name = grouped.Key,
SumA = grouped.Sum(x => x.CountA),
SumB = grouped.Sum(x => x.CountB),
Phone = grouped.Last().Phone };
Cambio de grouped.Last()
a grouped.First()
sería más eficiente, por cierto.
La evaluación de múltiples agregados de esta manera no es muy eficiente en general. La Empuje proyecto LINQ desarrollado por mí y Marc Gravell hace que sea mucho más eficiente en el costo de no ser tan fácil de usar. Es posible que desee buscar en ella si es necesario para hacer frente a una gran cantidad de datos.