使用lambda和处理空值的linq2sql求和

使用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

使用以下代码在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.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需要两个参数!这不会编译。。。用胰蛋白酶。另外,票证不是空的…不需要检查票证中的空。如果票证不是问题,我将删除针对它的“防御”。编辑。