使用linq列出过滤

我有一个List对象,其中包含Id值,例如它包含:1,2,10,1,23,11,1,4,2,2,…等我需要找出多少次“1”,“在C#中使用Linq发生了2“,…等

善意的帮助。

使用Enumerable.GroupBy非常简单:

 var grouped = list.GroupBy(x => x); foreach (var group in grouped) { Console.WriteLine("{0} appears {1} times", group.Key, group.Count()); } 

或者:

 var query = list.GroupBy(x => x, (x, g) => new { Key = x, Count = g.Count() })); foreach (var result in query) { Console.WriteLine("{0} appears {1} times", result.Key, result.Count); } 

(区别在于我们真正将组转换为结果。)

使用GroupBy :

 var les = new[] { 1, 2, 10, 1, 23, 11, 1, 4, 2, 2 }; var result = les .GroupBy(i => i, (e, g) => new { Value = e, Count = g.Count() }); 

或使用替代语法:

 var result = from i in les group i by i into g select new { Value = g.Key, Count = g.Count() }; 
  var l = new List {1,2,10,1,23,11,1,4,2,2}; l.GroupBy(i => i) .ToList() .ForEach(g => Console.WriteLine("{0} : {1}", g.Key, g.Count())); 
 var list = new List { 1, 2, 10, 1, 23, 11, 1, 4, 2, 2, }; var groups = list.GroupBy(i => i); foreach (var group in groups) Console.WriteLine("{0} occurs {1} times", group.Key, group.Count());