gpt4 book ai didi

c# - 比较可为空的列会引发 "Unable to cast the type..."异常

转载 作者:行者123 更新时间:2023-11-30 12:11:27 24 4
gpt4 key购买 nike

我的实体 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));

给出异常(exception):

Unable to create a constant value of type 'System.Object'. Only primitive types or enumeration types are supported in this context.

然后我尝试了:

var results = context.NewsItems
.Where(n => lid.Equals(n.LibraryID));

得到:

Unable to cast the type 'System.Nullable`1' to type 'System.Object'. LINQ to Entities only supports casting EDM primitive or enumeration types.

还有这个:

var results = context.NewsItems
.Where(n => object.Equals(lid, n.LibraryID));

给出与上一个相同的异常。

现在我很绝望,所以我试着把事情复杂化(就像其他论坛建议的那样,例如 here ):

var results = context.NewsItems
.Where(n => (lid == null ? n.LibraryID == null : n.LibraryID == lid));

但仍然遇到同样的异常。

那么...有什么简单解决方法吗?

最佳答案

怎么样

var results = context.NewsItems
.Where(n => lid.HasValue ? lid.Value == n.LibraryId.Value : (!n.LibraryId.HasValue) );

关于c# - 比较可为空的列会引发 "Unable to cast the type..."异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15399905/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com