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


Name Count 
AA 2 
BB 3 
AA 4 

J'ai un IEnumerable<Category>LINQ total

et voudrais obtenir une liste des catégories avec des noms uniques et la somme des entrées multiples

Sortie

Name Count 
AA 6 
BB 3 

Mise à jour

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

Comment pourrais-je sommer deux colonnes. et la colonne de téléphone peut être la dernière ligne ou une ligne

Répondre

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

class Category Catégorie { public string Nom {get; ensemble; } public int CountA {get; set;} public int CountB {get; set;} public string Téléphone {get; set;} } Comment pourrais-je additionner deux colonnes. et la colonne de téléphone peut être la dernière rangée ou n'importe quelle rangée –

5

Votre question mise à jour est pas tout à fait claire en ce qui concerne le numéro de téléphone, mais je suppose que vous voulez quelque chose comme:

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 }; 

Changer grouped.Last() à grouped.First() serait plus efficace, soit dit en passant.

L'évaluation de plusieurs agrégats de cette manière n'est pas très efficace en général. Le projet Push LINQ développé par moi-même et Marc Gravell le rend beaucoup plus efficace au prix de ne pas être aussi facile à utiliser. Vous voudrez peut-être y jeter un coup d'œil si vous avez besoin de traiter beaucoup de données.