我試圖將一個對象與一個隨機值進行比較,該值可能是一個ID和ObjectKey,甚至是同一個對象。總之,我想比較一個對象與任何東西,而不只是相同的類型。使用ExpressionVisitor將'obj == value'更改爲'obj.Equals(value)'
爲此,我覆蓋了對象的Equals()和GetHashCode(),並且它按預期工作。但我注意到當我通過'obj == value'搜索時,Linq不會調用這些方法。
如果我將查詢更改爲'obj.Equals(value)',則應該調用Equals()方法。但這不是我所需要的。此外,我試圖重載'=='和'!='操作符,但是當我通過接口搜索時,這些重載不會被調用。
最後,我不能手動更改所有查詢,因爲有人可能在將來的任何地方使用'==',破壞代碼。
所以我來ExpressionVisitor。我注意到我可以重寫我的Linq查詢的表達式,但我有點無知。我嘗試了一些我發現的例子,但是我遇到了一些錯誤。
最後,這是我經由ExpressionVisitor需要:
替換此: VAR對象= ctx.Where(OBJ => OBJ ==值);
to this: var objects = ctx.Where(obj => obj.Equals(value));
可能嗎?