2

在 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 类型的成员,该类型是不可为 null 的值类型。

4

2 回答 2

2

. 您必须确保x.Rate是一个int,而不是一个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.
于 2012-05-22T19:31:53.697 回答
0

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

我们不知道这是否引发了异常,或者其中一个RDetails.Rate值是否为空。真的是一个Nullable<int>吗?

如果RDetails.Rate是 a Nullable<int>,那么您...Sum(x => x.Rate ?? 0)可以避免异常。

于 2012-05-22T19:44:06.817 回答