如何使用 IComparable 按年龄和性别分组?
How to group by age and gender with IComparable?
如标题所说,我必须按年龄和性别分组,但我收到此错误消息:
At least one object must implement 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))
但我不会有性别。
当你这样做时:
new { Age = 10 * (l.Age / 10), l.GenderName }
您正在创建一个匿名类型,我认为它不会实现 IComparable
。当您省略大括号和 , l.GenderName
时,表达式的结果是一个 int
,它确实实现了 IComparable
.
当您使用 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
字段。
如果您想以某种方式对结果进行排序,您应该指向这样的字段:
.OrderBy(x => x.Key.Age)
或者这样:
.OrderBy(x => x.Key.GenderName)
如果您想先通过 Age
订购,然后通过 GenderName
使用 ThenBy
扩展方法,如下所示:
.OrderBy(x => x.Key.Age).ThenBy(x => x.Key.GenderName)
如标题所说,我必须按年龄和性别分组,但我收到此错误消息:
At least one object must implement 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))
但我不会有性别。
当你这样做时:
new { Age = 10 * (l.Age / 10), l.GenderName }
您正在创建一个匿名类型,我认为它不会实现 IComparable
。当您省略大括号和 , l.GenderName
时,表达式的结果是一个 int
,它确实实现了 IComparable
.
当您使用 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
字段。
如果您想以某种方式对结果进行排序,您应该指向这样的字段:
.OrderBy(x => x.Key.Age)
或者这样:
.OrderBy(x => x.Key.GenderName)
如果您想先通过 Age
订购,然后通过 GenderName
使用 ThenBy
扩展方法,如下所示:
.OrderBy(x => x.Key.Age).ThenBy(x => x.Key.GenderName)