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


Name Count 
AA 2 
BB 3 
AA 4 

私はIEnumerable<Category>LINQ集計

を持っており、ユニークな名前を持つカテゴリの一覧と複数のエントリの合計

出力

Name Count 
AA 6 
BB 3 

アップデートを取得したいと思い

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

どのように2つの列を合計しますか。

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

変更する:電話列が更新された質問は、電話番号の観点から、必ずしも明らかではないが、私はあなたが何かのようにしたい疑われる最後の行または任意の行

答えて

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

クラスカテゴリ { public string Name {get;セット; } public int CountA {get; set;} パブリックint CountB {get; set;} 公開ストリングPhone {get; set;} } どのように2つの列を合計しますか。 phone列は最後の行または任意の行にすることができます –

5

することができちなみに、grouped.Last()grouped.First()はもっと効率的です。

このように複数の集計を評価することは、一般的にはあまり効率的ではありません。私自身とMarc Gravellによって開発されたPush LINQプロジェクトは、使い方が非常に簡単ではないうえ、ずっと効率的です。多くのデータに対処する必要がある場合は、それを調べることをお勧めします。