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子句最好是内置的。两个版本我都想学;
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>
的元素,其中TKey
与personid
具有相同的类型,TValue
与Person
具有相同的类型。第二个查询返回对象的IEnumerable<>
。
例如,在第二种情况下,你可以这样做:
foreach(var g in top3peopleGroups)
{
Console.WriteLine("Person Id: " + g.Key + ", Count: " + g.Count());
}
我不明白问题的第一部分。什么名单?
对于第二部分:在SQL中相当于TOP
的linq是Take()
。将它与Skip()
结合以获得结果的下一个X行。