我正在尝试将一个对象与一个随机值(可能是一个 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));
可能吗?