重载 != 和 == 时过滤空值

Filtering null values when != and == are overloaded

我重载了实体类型的 != 和 == 运算符。现在,当我 运行 :

dbContext.MyEntityDbSet.Where(x => x.MyProperty != null) 

我收到一个异常

Cannot compare elements of type 'MyEntityType'. Only primitive types, enumeration types and entity types are supported.

如何绕过它?

谢谢

EF 不知道 == 和 != 被重载了。您还可以比较原始类型。此外,您不能比较 2 个相同类型的实体(它可以像 hibernate 那样比较它们比较主键)。因此,您还需要在 LINQ 查询中复制 == 和 !=(或具体化 - 即插入 ToList() - Where 之前的查询,但这是一个非常糟糕的解决方案)。

可能最好的方法是在没有重载的情况下将您的参数转换为泛型:

dbContext.MyEntityDbSet.Where(x => (object)x != null);