Linq 2 SQL使用lambda并处理空值

时间:2012-05-22 19:21:52

标签: linq linq-to-sql

使用以下代码在Linq to SQL中使用sum与lambda:

int query = (from f in odc.RDetails
                     where f.ticketID == int.Parse(ticket.ToString())
                     select f).Sum(x => x.Rate);



我收到以下错误:

无法将null值分配给类型为System.Int32且具有非可空值类型的成员。

2 个答案:

答案 0 :(得分:2)

。您必须确保x.Rateint,而不是int?int接受null作为值。)

。如果查询没有元素,.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.

答案 1 :(得分:0)

我会将int.Parse(ticket.ToString())分解为自己的行,以便将该解析与Linq隔离以进行调试。

我们不知道是抛出异常还是其中一个RDetails.Rate值为null。它确实是Nullable<int>吗?

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