【发布时间】:2019-01-22 00:49:48
【问题描述】:
我有这个 LINQ to SQL 查询:
int? ID = null;
var query = from t in db.things where (!ID.HasValue || t.ID == ID.Value) select t;
现在在常规 LINQ 中,这可以正常工作,但在 LINQ to SQL 中会引发“可为空的对象必须具有值”异常。
LINQ to SQL 是否会对我的 null 检查做出一些奇怪的解释?如果是这样,我该如何正确实现这个功能?
【问题讨论】:
-
您检查 t.ID 是否为空?
-
t.ID 是一个 int,所以它不能为空 - 它也是数据库中的主键
-
仍然
t可以为空。看起来ID是t的一个属性 -
因为 t 来自数据库,所以它永远不会为空。我也使用断点确认了这一点 - 异常肯定来自对 ID.Value 的调用
-
将 t.ID 的定义更改为 int?。看起来数据库可以为空,但你的类不能。
标签: c# linq-to-sql nullable