LINQ:如何获得按人物的人数

本文关键字:人物 何获得 LINQ | 更新日期: 2023-09-27 18:10:48

我需要在这样的列表中找到拥有最多项目的人:

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子句最好是内置的。两个版本我都想学;

LINQ:如何获得按人物的人数

Max:

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>的元素,其中TKeypersonid具有相同的类型,TValuePerson具有相同的类型。第二个查询返回对象的IEnumerable<>

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

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

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

对于第二部分:在SQL中相当于TOP的linq是Take()。将它与Skip()结合以获得结果的下一个X行。