C# LINQ:如何通过personid计算人数

C# LINQ:如何通过personid计算人数,c#,linq,C#,Linq,我需要找到列表中项目最多的人,如下所示: class Person { var personid; var personname; var blah; } List<Person> people = new List<Person>(); 样本结果 1 3 (id, count) 奖金结果示例-带Top N条款 1 3 2 1 加;Top N子句如果有/内置的话会很好。我想学习两个版本;有没有Top子句。我不明白问题的第一部分。什么名单 对

我需要找到列表中项目最多的人,如下所示:

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

List<Person> people = new List<Person>(); 
样本结果

1 3   (id, count)
奖金结果示例-带Top N条款

1 3
2 1

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

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

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

Max:

顶部:

编辑:

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

例如,在第二种情况下,您可以:

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

什么物品的最高限额?布拉是一个收藏吗?措辞拙劣的问题抱歉-1。@Marcelo Cantos:谢谢你的格式化,看起来很棒。我写得很匆忙,对不起。@NimeCloud:Np。顺便说一句,您可以使用Ctrl-K缩进选定的代码;FixedIt将是一种顶级列表。现在我知道了最重要的数字,但我如何才能确定这个人是谁?@Nime:在Key属性中,检查我的编辑;
var biggestGrpOfPeopleHavingSamePersonId = 
people.GroupBy(x => x.personid).Max(x => x.Count());
var top3peopleGroups = 
people.GroupBy(x => x.personid).OrderByDescending(x => x.Count()).Take(3);
foreach(var g in top3peopleGroups)
{
   Console.WriteLine("Person Id: " + g.Key + ", Count: " + g.Count());
}