このような拡張メソッドを作成しようとしました...
public static IEnumerable<T> Distinct<T>(this IEnumerable<T> value, IEnumerable<T> compareTo, Func<T, object> compareFieldPredicate)
{
return value.Where(o => !compareTo.Exists(p => compareFieldPredicate.Invoke(p) == compareFieldPredicate.Invoke(o)));
}
こういうことができると思います...
IEnumerable<MyCollection> distinctValues = MyCollection.Distinct(MyOtherCollection, o => o.ID); //Note that o.ID is a guid
さて、この時点で、私は自分の個別のアイテムだけが私に返されることを期待していましたが、私が見つけたのは、これは決してそうではなかったということです。
さらに調査すると、次のコードを使用してこのメソッドを分解します。
Guid guid1 = Guid.NewGuid();
Guid guid2 = new Guid(guid1.ToString());
Func<MyObject, object> myFunction = o => o.ID;
Func<MyObject, object> myFunction1 = o => o.ID;
bool result = myFunction(MyObject) == myFunction1(MyObject);
//result = false
実際、GUIDが同じであっても、比較では常にfalseが返されることがわかりました。
これの原因は何ですか?