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

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

您可以通过像这样的 lambda 表达式来实现它

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

并通过使用GroupBy@Asif 回答的Linq Extension 方法

于 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()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 回答