我的实体NewsItem
有一个可为空的外键属性:LibraryID
类型为int?
。
我的问题是当我查询该属性并将其与除 之外的任何值进行比较时null
,我得到了异常。
最初我的代码是:
int? lid = ...
var results = context.NewsItems
.Where(n => n.LibraryID == lid);
但它根本没有给我任何结果,不管是什么lid
。
所以,我尝试了:
var results = context.NewsItems
.Where(n => n.LibraryID.Equals(lid));
给出例外:
无法创建“System.Object”类型的常量值。此上下文仅支持原始类型或枚举类型。
然后我尝试了:
var results = context.NewsItems
.Where(n => lid.Equals(n.LibraryID));
并得到:
无法将类型“System.Nullable`1”转换为类型“System.Object”。LINQ to Entities 仅支持转换 EDM 基元或枚举类型。
还有这个:
var results = context.NewsItems
.Where(n => object.Equals(lid, n.LibraryID));
给出与最后一个相同的例外。
现在我很绝望,所以我试图使事情复杂化(就像其他论坛建议的那样,例如这里):
var results = context.NewsItems
.Where(n => (lid == null ? n.LibraryID == null : n.LibraryID == lid));
但仍然得到同样的例外。
那么......任何简单的解决方法?