至少有一个对象必须实现IComparable
var ageStats = vModel
.GroupBy(l => new { Age = 10 * (l.Age / 10), l.GenderName })
.OrderBy(x => x.Key)
.Select(g => new
{
Name = g.Key,
Count = g.Select(l => l.Age).Count()
})
.ToList();
如果我按年龄分组,那么它会起作用.GroupBy(l => 10 * (l.Age / 10))
但我不会有性别。
答案 0 :(得分:2)
当您订购小组结果时,使用Key
,在您的情况下,复杂的匿名类型包含2个字段:
var ageStats = vModel
.GroupBy(l => new { Age = 10 * (l.Age / 10), l.GenderName })
.OrderBy(x => x.Key) //<-- this line
.Select(g => new
{
Name = g.Key,
Count = g.Select(l => l.Age).Count()
})
.ToList();
仅适用于Age
分组,因为在这种情况下简单的int
字段是anonymouse类型。
如果你想以某种方式订购你的结果你应该指向这样的字段:
.OrderBy(x => x.Key.Age)
或者这个:
.OrderBy(x => x.Key.GenderName)
如果您想先按Age
订购,请GenderName
使用ThenBy
扩展方法,如下所示:
.OrderBy(x => x.Key.Age).ThenBy(x => x.Key.GenderName)
答案 1 :(得分:-1)
当你这样做时:
new { Age = 10 * (l.Age / 10), l.GenderName }
您正在创建一个匿名类型,我不相信实现IComparable
。当您省略大括号和, l.GenderName
时,表达式的结果为int
,它会实现IComparable
。