C# 如何处理返回零行并让其返回十进制值的linq查询?
当为this函数指定一个id,该id在SQL中返回0行时,我会得到以下错误: 无法将null值分配给System.Decimal类型的成员,该类型是不可为null的值类型 修改查询以防止出现这种情况的最佳方法是什么。我从不同的表中提取值,而不是在这里查询,因此我希望能够处理给它一个“坏”idC# 如何处理返回零行并让其返回十进制值的linq查询?,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,当为this函数指定一个id,该id在SQL中返回0行时,我会得到以下错误: 无法将null值分配给System.Decimal类型的成员,该类型是不可为null的值类型 修改查询以防止出现这种情况的最佳方法是什么。我从不同的表中提取值,而不是在这里查询,因此我希望能够处理给它一个“坏”id 返回错误:您应该能够返回: return (from o in _context.Details where o.CustomerID == companyId
返回错误:您应该能够返回:
return (from o in _context.Details
where o.CustomerID == companyId
select o).Sum(p => p.SomeValue) ?? -1.0;
或
??
运算符将检查null,如果为null,则返回下一个值。您应该能够返回:
return (from o in _context.Details
where o.CustomerID == companyId
select o).Sum(p => p.SomeValue) ?? -1.0;
或
??
运算符将检查null,如果为null,则返回下一个值。我知道null合并运算符,但它仍然失败。但是根据您的评论,我在使用GetValuerDefault时删除了它,它可以正常工作。不确定为什么会有不同。@speedy217-这是因为不能对空引用执行类似于.GetValueOrDefault()
的操作。这意味着没有满足您的条件的“行”,您需要让Linq自己处理它。但是根据您的评论,我在使用GetValuerDefault时删除了它,它可以正常工作。不确定为什么会有不同。@speedy217-这是因为不能对空引用执行类似于.GetValueOrDefault()
的操作。这意味着没有满足您的条件的“行”,您需要让Linq自己处理它。
decimal? temp = (from o in _context.Details
where o.CustomerID == companyId
select o).Sum(p => p.SomeValue);
return temp ?? -1.0;