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

JYe*_*ton 5 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();
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎不起作用,因为它导致了一个错误:

ArgumentException:至少有一个对象必须实现IComparable.

如何更正此LINQ查询(如果它是错误的)或者我应该寻找什么来防止此错误,如果它是正确的?

Ani*_*Ani 14

您当前的查询正在尝试查找"最大组",然后检索该组的计数.这显然没有意义; 群体没有任何自然秩序,也没有办法Enumerable.Max知道你有兴趣找到拥有最大伯爵的群体.

你可能想要的是:

int largestGroupCount = ObjectList.GroupBy(x => x.GroupInt)
                                  .Max(g => g.Count());
Run Code Online (Sandbox Code Playgroud)

它使用Max"在序列的每个元素上调用转换函数并返回最大Int32值" 的重载.

人们可以将其视为类似于:

int largestGroupCount = ObjectList.GroupBy(x => x.GroupInt)
                                  .Select(g => g.Count()) 
                                  .Max();
Run Code Online (Sandbox Code Playgroud)

其通过每一组投影到其计数创建一个序列,然后找到最大的那个序列.