私はLinqに関する本を読んでいて、Distinctメソッドには比較関数を使うオーバーロードがあることがわかりました。これはコレクションから別個のエンティティを取得したいが、他のプロパティが異なる場合であっても、エンティティIDに比較されるようにしたいという問題に対して、良い解決策となります。Linq Distinctメソッドでどのようにカスタムコンペアラを使用しますか?
私はGribulatorエンティティを持っている場合、本によると、私はこのような比較演算子を作成することができるはず...
private class GribulatorComparer : IComparer<Gribulator> {
public int Compare(Gribulator g1, Gribulator g2) {
return g1.ID.CompareTo(g2.ID);
}
}
...そして、このようにそれを使用して...
List<Gribulator> distinctGribulators
= myGribulators.Distinct(new GribulatorComparer()).ToList();
はしかし、これは
「System.Collections.Generic.Listは」「「明確な」と最高の拡張メソッドのオーバーロードの定義が含まれていません...次のコンパイラエラーが発生しますSystem.Linq.Enumerable .Distinct(System.Collections.Generic.IEnumerable、System.Collections.Generic.IEqualityComparer) 'は、いくつかの無効な引数を持ってい
引数2:から変換できません 'System.Collections.Generic.IEqualityComparer' から' LinqPlayground.Program.GribulatorComparer 「
は、私は少し周りを探索してきたが、このようなコードを使用する例が、コンパイラエラーに関する苦情をたくさん見てきました。
私は間違っていますか?また、これを行う最善の方法ですか?私はここで一回限りの解決策を望んでいるので、エンティティ自体のコードを変更したいとは思わないでください。私はエンティティを通常のままにしたいが、この1つの場所ではIDだけで比較する。
ありがとうございました。あなたはIComparer<T>
としてあなた比較子を実装しようとしている
私はVS2012を使用していますので、C#で.NET 4.0を使用しています。 –