如何使用LINQ计算最大组中的对象数?

时间:2011-01-18 01:25:37

标签: c# linq

如何使用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查询(如果它是错误的)或者我应该寻找什么来防止此错误?如果它是正确的?

1 个答案:

答案 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();

通过将每个组投影到其计数来创建序列,然后找到 序列的最大值。