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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top