如何使用LINQ查找对象集合中最大对象组的计数?
举个例子:
struct MyObject
{
public int SomeInt;
public int GroupInt;
}
List<MyObject> ObjectList = new List<MyOBject>();
// populate list
int LargestGroup = ObjectList.GroupBy(x => x.GroupInt).Max().Count();
这对我来说似乎不起作用,因为它导致了错误:
ArgumentException:至少有一个对象必须实现IComparable。
如何更正此LINQ查询(如果它是错误的)或者我应该寻找什么来防止此错误?如果它是正确的?
答案 0 :(得分:13)
您当前的查询正在尝试查找“最大组”,然后检索该组的计数。这显然没有意义;群组没有任何自然顺序,Enumerable.Max
无法知道您有兴趣找到具有最大 Count 的群组。
你可能想要的是:
int largestGroupCount = ObjectList.GroupBy(x => x.GroupInt)
.Max(g => g.Count());
使用Max
的重载“在序列的每个元素上调用转换函数并返回最大的Int32值。”
人们可以将其视为类似:
int largestGroupCount = ObjectList.GroupBy(x => x.GroupInt)
.Select(g => g.Count())
.Max();
通过将每个组投影到其计数来创建序列,然后找到 序列的最大值。