...但它不是空的。
仅供参考 - 此错误存在许多线程,但我没有看到使用匿名类型。
我在 Linq 查询中得到一个奇怪的 InvalidOperationException。
消息:“转换为值类型 'Int32' 失败,因为具体化值为 null。结果类型的泛型参数或查询必须使用可为空的类型。”
令人困惑的是,它在创建匿名类型时出错:
var workstepid = 484,449;
var wsData = ion.xWorkSteps
.Where(w => w.WorkStepId == workstepId)
.Select(w => new
{
w.WorkStepId,
w.ServiceId,
w.Service.TitleId,
w.Service.Title.OrderId,
w.Service.Title.AltTitleId
}).SingleOrDefault();
在 LinqPad 中,这个特定的查询运行得很好,并且使用的 workstepId 为匿名类型的每个属性返回一个整数值。那么,当任何属性都没有空值时,为什么会出现转换错误!?
仅供参考,最后一个属性 AltTitleId 是可为空的 int,其他属性是 int。另外,这段代码是几周前写的,直到今天我才收到这个错误。我的 EF 有什么时髦的吗?
编辑:已解决
我们在我们的数据库中使用软删除,将删除的记录设置为 Acive=0。事实证明,在 edmx 表上的 EF 中设置了一个属性,以过滤掉非活动记录(针对 Active=1 的过滤器)。自然,这不会影响 Linqpad,它给了我预期的结果,但由于这是我正在测试的旧记录,标题记录 (Service.Title) 已标记为 Active=0,因此返回 null。
感谢大家的帮助。