【发布时间】:2016-04-03 21:29:59
【问题描述】:
我正在尝试将一个对象与一个随机值(可能是一个 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));
有可能吗?
【问题讨论】: