【发布时间】:2020-04-29 22:30:59
【问题描述】:
我有一个针对 DbContext 的查询,例如:
ctx.Items.SingleOrDefault(i => i.Id == *someQueryThatReturns0*).Code
someQueryThatReturns0 是一个查找 Id 的查询,类似于以下内容:
otherItems.Where(h => h.Id == xyz).Select(s => s.OtherId).SingleOrDefault()
当这个内部查询没有结果时,内部SingleOrDefault 将返回 0,因为 Id 是 int,这意味着外部 Items.SingleOrDefault(..) 应该返回 null。
但是当引用 Items.SingleOrDefault(..).Code 而不是得到 NullRef 异常时,它将只是 null。
这整个事情是一个更大的查询的一部分,它用于在 Select() 中设置值,类似于:
someComplexQuery.Select(x => new someDto(){
...
someProp = x.Valid ? ctx.Items.SingleOrDefault(i => i.Id == *someQueryThatReturns0*).Code : null;
...
})
执行查询时,我预计会出现 NullRef 异常,但 someProp 基本上只是简单地合并到 null。这是预期的行为,仅仅是因为在这样的查询中引用 .Code 会以某种方式转换为 SQL 查询吗?
还是我在这里遗漏了什么?
【问题讨论】:
标签: c# linq entity-framework-core