如何使用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)
其通过每一组投影到其计数创建一个序列,然后找到最大的那个序列.