使用lambda和处理空值的linq2sql求和
使用以下代码在Linq to SQL中使用lambda求和时:使用lambda和处理空值的linq2sql求和,linq,linq-to-sql,Linq,Linq To Sql,使用以下代码在Linq to SQL中使用lambda求和时: int query = (from f in odc.RDetails where f.ticketID == int.Parse(ticket.ToString()) select f).Sum(x => x.Rate); 我得到以下错误: 无法将空值分配给System.Int32类型的成员,该类型是不可为空的值类型。。您必须确保x.Ra
int query = (from f in odc.RDetails
where f.ticketID == int.Parse(ticket.ToString())
select f).Sum(x => x.Rate);
我得到以下错误:
无法将空值分配给System.Int32类型的成员,该类型是不可为空的值类型。。您必须确保
x.Rate
是int
,而不是int?
(接受null
作为值的int
)
。如果查询没有元素,.Sum
将不会执行任何操作,并将返回null
。选择一个默认值,例如0
var query = from f in odc.RDetails
where f.ticketID == int.Parse(ticket.ToString())
select f;
int result = query.Any()
? query.Sum(x => x.Rate ?? 0) // use the ?? if x.Rate is an "int?".
: 0; // default value you can choose.
我将把
int.Parse(ticket.ToString())
分解到它自己的行中,以将该解析与Linq隔离以进行调试
我们不知道这是抛出异常还是RDetails.Rate
值之一为空。它真的是可为空的吗
如果
RDetails.Rate
是一个可为空的
,那么您可以…求和(x=>x.Rate??0)
并避免异常。我正在获取运算符??不能应用于int和intcode类型的操作数。在测试查询中的空性后,也可以调用Sum。新编辑…TryParse需要两个参数!这不会编译。。。用胰蛋白酶。另外,票证不是空的…不需要检查票证中的空。如果票证不是问题,我将删除针对它的“防御”。编辑。