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

时间:2015-06-25 12:23:03

标签: c# entity-framework linq-to-sql linq-to-entities

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

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

我得到一个例外

  

无法比较类型' MyEntityType'的元素。只有原始类型,   支持枚举类型和实体类型。

我该如何绕过它?

谢谢

2 个答案:

答案 0 :(得分:1)

EF不知道==和!=是否超载。您还可以比较基元类型。此外,您无法比较相同类型的2个实体(它可以比较它们比较像hibernate那样的主要键)。所以你需要在LINQ查询中复制==和!=(或实现 - 即插入ToList() - 在Where之前的查询,但这是一个非常糟糕的解决方案。)

答案 1 :(得分:-1)

执行此操作的最佳方法可能是将参数转换为通用而不会过载:

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