次のように定義されたクラスがあるとします。
public class DataHolder
{
public string PropA { get; set; }
public string PropB { get; set; }
public string PropC { get; set; }
public int PropD { get; set; }
}
DataHolder
次のように宣言された s の配列のインスタンスがあります。
var x=new DataHolder[]{
new DataHolder(){PropA="A",PropB="X",PropC="J",PropD=1},
new DataHolder(){PropA="A",PropB="Y",PropC="J",PropD=3},
new DataHolder(){PropA="A",PropB="Y",PropC="J",PropD=5},
new DataHolder(){PropA="B",PropB="X",PropC="K",PropD=7},
new DataHolder(){PropA="B",PropB="Y",PropC="L",PropD=9},
new DataHolder(){PropA="C",PropB="X",PropC="J",PropD=11},
new DataHolder(){PropA="C",PropB="X",PropC="J",PropD=13},
new DataHolder(){PropA="C",PropB="Y",PropC="J",PropD=15},
new DataHolder(){PropA="C",PropB="Z",PropC="J",PropD=17}
};
そして、次のように LINQ GroupBy クエリを実行します。
var t = x.GroupBy(c => new { A = c.PropA, B = c.PropB, C = c.PropC })
結果を調べると、t には 7 つの要素があることがわかります。これは、配列内の異なる PropA、PropB、PropC の組み合わせの数であり、これが私が求めている効果です (イェイ!)。しかし、匿名型の新しい各インスタンスは他のインスタンスと等しくなく、t には 9 つの要素が必要なため、実際には機能しないはずだと思いました。最初に思ったように機能するのはなぜですか?