使用LINQ或lambda表达式获取该值的值和计数

时间:2012-10-24 05:51:13

标签: c# .net linq lambda

以下格式的数据对象列表

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或lambda表达式获得如上所述的结果集?

5 个答案:

答案 0 :(得分:8)

您可以使用GroupBy

var groupedlist = list.GroupBy(c => c.Col1)
                      .Select((key, c) => new {Value = key, Count = c.Count()});

答案 1 :(得分:7)

您可以通过lambda表达式实现它,如

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

使用Linq扩展方法GroupBy作为@Asif

的回答

答案 2 :(得分:6)

var dictionary = list.GroupBy(str => str.Col1)
    .ToDictionary(group => group.Key, group => group.Count());

from here

答案 3 :(得分:3)

col1上查看使用.GroupBy() LINQ方法。然后,您可以对结果组使用.Count()来确定每个组中的数量。

答案 4 :(得分: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