我需要找到列表中包含最多项目的人:
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子句。
答案 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
属于同一类型personid
而TValue
属于Person
类型。第二个查询返回IEnumerable<>
个像这样的对象。
所以,例如在第二种情况下你可以这样做:
foreach(var g in top3peopleGroups)
{
Console.WriteLine("Person Id: " + g.Key + ", Count: " + g.Count());
}