2009-03-29 17 views
5
class Category 
{   
    public string Name { get; set; } 
    public int Count { get; set;} 
} 


Name Count 
AA 2 
BB 3 
AA 4 

Tengo una IEnumerable<Category>LINQ agregada

y me 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 

actualización

class Category 
{ 
public string Name { get; set; } 
public int CountA { get; set;} 
public int CountB { get; set;} 
public string Phone { get; set;} 
} 

Cómo sumar dos columnas. y la columna de teléfono puede ser la última fila o cualquier fila

Respuesta

1
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) }); 
+0

clase Categoría { cadena pública Nombre {get; conjunto; } public int CountA {get; establecer;} public int CountB {get; establecer;} cadena pública Teléfono {obtener; establecer;} } Cómo sumar dos columnas. y la columna del teléfono puede ser la última fila o cualquier fila –

5

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 grouped.Last() a grouped.First() sería más eficiente, por cierto.

La evaluación de múltiples agregados de esta manera no es terriblemente eficiente en general. El proyecto Push LINQ desarrollado por mí y Marc Gravell lo hace mucho más eficiente a costa de no ser tan fácil de usar. Es posible que desee investigar si necesita lidiar con una gran cantidad de datos.

Cuestiones relacionadas