オブジェクトをIDである可能性のあるランダムな値とObjectKey、または同じオブジェクトと比較しようとしています。要するに、オブジェクトを同じ型だけでなく、何でも比較したいのです。
これを行うために、オブジェクトの Equals() と GetHashCode() をオーバーライドしましたが、期待どおりに動作しています。しかし、「obj == value」で検索すると、Linq がこれらのメソッドを呼び出さないことに気付きました。
クエリを「obj.Equals(value)」に変更すると、Equals() メソッドが呼び出されます。しかし、それは私が必要とするものではありません。
さらに、「==」および「!=」演算子をオーバーロードしようとしましたが、インターフェイスを介して検索しているため、これらのオーバーロードは呼び出されていません。
最後に、すべてのクエリを手動で変更することはできません。誰かが将来どこでも「==」を使用してコードを壊す可能性があるからです。
だから私は ExpressionVisitor に来ます。Linq クエリの式を書き直すことができることに気付きましたが、ちょっと無知です。見つけたいくつかの例を試しましたが、何らかのエラーが発生しました。
最後に、これが ExpressionVisitor 経由で必要なものです。
これを置き換えます: var objects = ctx.Where(obj => obj == value);
これに: var objects = ctx.Where(obj => obj.Equals(value));
出来ますか?