6

以下の形式のデータ オブジェクトのリスト

Col1  Col2  Col3

B     45    36    
B     12    69   
A     46    76    
C     89    09    
B     451   37   
D     435   46   
A     450   50   
D     98    43   
B     358   39
A     987   89

次の形式のような結果セットを取得する必要があります (「A」が 3 回、「B」が 4 回など)。

Value  Count

A      3   
B      4  
C      1    
D      2

LINQ またはラムダ式を使用して上記のような結果セットを取得するにはどうすればよいですか?

4

5 に答える 5

8

そのためにGroupByを使用できます。

var groupedlist = list.GroupBy(c => c.Col1)
                      .Select((key, c) => new {Value = key, Count = c.Count()});
于 2012-10-24T05:55:43.827 に答える
8

次のようなラムダ式で実現できます

var list = from x in dataObjects
           group x by x.Col1 into g
           select new { Value = g.Key, Count = g.Count() };

GroupByそして、@Asif が回答したLinq 拡張メソッドを使用することによって

于 2012-10-24T06:00:38.990 に答える
6
var dictionary = list.GroupBy(str => str.Col1)
    .ToDictionary(group => group.Key, group => group.Count());

ここから

于 2012-10-24T05:57:01.800 に答える
3

.GroupBy()でLINQ メソッドを使用する方法を調べてくださいcol1。その後.Count()、結果のグループに対して を使用して、各グループに含まれる数を決定できます。

于 2012-10-24T05:56:49.537 に答える
2
List<TestOverFlow> list = new List<TestOverFlow>() 
{
  new TestOverFlow {Col1="B",Col2=45,Col3=36},
  new TestOverFlow {Col1="B",Col2=12,Col3=69},
  new TestOverFlow {Col1="A",Col2=46,Col3=76},

  new TestOverFlow {Col1="C",Col2=89,Col3=09},
  new TestOverFlow {Col1="C",Col2=10,Col3=09},
  new TestOverFlow {Col1="C",Col2=89,Col3=1},
};

var Query = from result in list orderby result.Col1
            group result by result.Col1 into g 
            select new { Value = g.Key, Count = g.Count() };

foreach (var x in Query)
{
    Console.WriteLine("{0},{1}", x.Value, x.Count);
}

結果:

Value Count     
A      1  
B      2  
C      3
于 2012-10-24T07:25:07.017 に答える