C# 如何处理返回零行并让其返回十进制值的linq查询?

C# 如何处理返回零行并让其返回十进制值的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

当为this函数指定一个id,该id在SQL中返回0行时,我会得到以下错误:

无法将null值分配给System.Decimal类型的成员,该类型是不可为null的值类型

修改查询以防止出现这种情况的最佳方法是什么。我从不同的表中提取值,而不是在这里查询,因此我希望能够处理给它一个“坏”id


返回错误:

您应该能够返回:

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;