LINQ:如何按人名计算人数

时间:2011-10-10 15:46:25

标签: c# linq

我需要找到列表中包含最多项目的人:

class Person
{
   var personid;
   var personname;
   var blah;
}

List<Person> people = new List<Person>(); 

样本列表

1 John
1 John
1 John
2 Smith
1 John

示例结果

1 3   (id, count)

样本奖励结果 - 使用Top N条款

1 3
2 1

加;如果有/内置的话,Top N子句会很好。我想学两个版本;有或没有Top子句。

2 个答案:

答案 0 :(得分:1)

我不明白问题的第一部分。什么清单?

对于第二部分:SQL中等同于TOP的linq是Take()。将其与Skip()组合以获得结果的下一个X行。

答案 1 :(得分:1)

最大:

var biggestGrpOfPeopleHavingSamePersonId = 
people.GroupBy(x => x.personid).Max(x => x.Count());

顶部:

var top3peopleGroups = 
people.GroupBy(x => x.personid).OrderByDescending(x => x.Count()).Take(3);

编辑:

第一个查询返回IGrouping<TKey,TValue>类型的元素,其中TKey属于同一类型personidTValue属于Person类型。第二个查询返回IEnumerable<>个像这样的对象。

所以,例如在第二种情况下你可以这样做:

foreach(var g in top3peopleGroups)
{
   Console.WriteLine("Person Id: " + g.Key + ", Count: " + g.Count());
}