我不知道为什么我在以下两个GroupBy()
查询中获得了不同的结果。我希望它们都返回3个分组,但键入的键选择器GroupBy()
返回4。
给出一个关键类:
class Key
{
public int Day { get; set; }
}
当我跑步时:
var data = new[]
{
new { Date = DateTime.Now },
new { Date = DateTime.Now },
new { Date = DateTime.Now.AddDays(1) },
new { Date = DateTime.Now.AddDays(2) }
};
var groupsByAnonymousKey = data.GroupBy(m => new
{
m.Date.DayOfYear
});
var groupsByTypedKey = data.GroupBy(m => new Key
{
Day = m.Date.DayOfYear
});
var anonymousCount = groupsByAnonymousKey.Count(); // 3
var typedCount = groupsByTypedKey.Count(); // 4
anonymousCount
为3,typedCount
为4。
答案 0 :(得分:2)
因为在第二个版本中,您按类分组:Key
。类实例彼此不相等,即使它们的所有属性相等,而不是 anonumous 类型。因此typedCount
始终相等data.Length
。要解决此问题,您可以在comparer
运算符的其他版本指定GroupBy
或覆盖Equals
类的GetHashCode
和Key
方法,也可以更改{{ 1}}类到Key
。
答案 1 :(得分:0)
可能是因为同一天的两个不同Key对象的GetHashCode不同。你能尝试覆盖GetHashCode并在同一天返回它吗?