2012-05-22 116 views
2

当使用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的成员,这是一个非空值类型。

回答

2

。您必须确保x.Rateint,而不是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. 
+0

我收到运营商?不能应用于int和int类型的操作数 – InCode

+0

检查编辑的答案。现在'结果'将持有这笔钱! –

+0

在测试查询中的无效性之后,也可以调用'.Sum'。新编辑... –

0

我会打破int.Parse(ticket.ToString())到自己的线上,以隔离Linq进行调试的解析。

我们不知道这是抛出异常还是RDetails.Rate值之一为空。这确实是一个Nullable<int>

如果RDetails.RateNullable<int>,那么你可以...Sum(x => x.Rate ?? 0)并避免例外。

+0

票根本不为空.... – InCode