2016-12-09 4 views
0

GroupBy()クエリの2つの結果が異なる理由がわかりません。私は実行するとGroupByの型付きキーセレクタと匿名キーセレクタの結果が異なるのはなぜですか?

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である私は両方のリターン3グループにそれらが、入力されたキーセレクターキークラスを考えるとGroupBy()戻り4.

を期待しますtypedCountは4です。

答えて

2

第2の亜種では、クラス:でグループ化しています。。クラスインスタンスは、たとえそのプロパティがすべて等しい場合でも、の代わりにタイプのお互いに等しくない。したがって、typedCountは常にdata.Lengthと等しくなります。これを修正するには、GroupBy演算子の別のバージョンでcomparerを指定するか、とGetHashCodeメソッドをKeyクラスに上書きすることができます。Keyクラスをstructに変更することもできます。

0

おそらく、同じ日の2つの異なるKeyオブジェクトのGetHashCodeが異なるためです。 GetHashCodeをオーバーライドして同じ日に同じものを返そうとすることはできますか?

関連する問題