如何检查我的lambda表达式为null?
如果没有匹配以下lambda查询的记录,我会得到一个
System.InvalidOperationException错误。 附加信息:转换为值类型’System.Decimal’失败,因为具体化值为null。 结果类型的generics参数或查询必须使用可空类型。
代码是: runTime = db.Records.Where(c => c.MachineDesc.Contains(strMachine) && c.ProductionDate == dt && c.Shift == x).Sum(c => c.RunMinutes);
变量runTime
是decimal
。 我尝试将其更改为decimal?
但我仍然得到同样的错误。
解决这个问题的正确方法是什么?
首先,您可以从满足条件的对象中选择十进制值。 然后在.Sum()
方法之前使用.DefaultIfEmpty()
.Sum()
方法:
runTime = db.Records .Where(c => c.MachineDesc.Contains(strMachine) && c.ProductionDate == dt && c.Shift == x) .Select(c => c.RunMinutes) .DefaultIfEmpty() .Sum();
如果序列为空,则DefaultIfEmpty()
函数会插入具有默认值的单个元素。 而且我们知道, decimal
类型的defualt值是0.0M
。 (默认值表)
另外 :
你没告诉我们Linq 什么 ? 你正在用吗。 但是,如果您使用的是LinqToEntity,则必须将代码更改为(EF不支持DefaultIfEmpty
):
runTime = db.Records .Where(c => c.MachineDesc.Contains(strMachine) && c.ProductionDate == dt && c.Shift == x) .Sum(c => (decimal?)c.RunMinutes) ?? 0;