当使用Linq中的拉姆达和使用下面的代码到SQL:LINQ的2 SQL总和拉姆达和处理空值
int query = (from f in odc.RDetails
where f.ticketID == int.Parse(ticket.ToString())
select f).Sum(x => x.Rate);
我收到以下错误:
空值不能被分配给类型为System.Int32的成员,这是一个非空值类型。
当使用Linq中的拉姆达和使用下面的代码到SQL:LINQ的2 SQL总和拉姆达和处理空值
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
值之一为空。这确实是一个Nullable<int>
?
如果RDetails.Rate
是Nullable<int>
,那么你可以...Sum(x => x.Rate ?? 0)
并避免例外。
票根本不为空.... – InCode
我收到运营商?不能应用于int和int类型的操作数 – InCode
检查编辑的答案。现在'结果'将持有这笔钱! –
在测试查询中的无效性之后,也可以调用'.Sum'。新编辑... –