使用以下代码在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且具有非可空值类型的成员。
答案 0 :(得分: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.
答案 1 :(得分:0)
我会将int.Parse(ticket.ToString())
分解为自己的行,以便将该解析与Linq隔离以进行调试。
我们不知道是抛出异常还是其中一个RDetails.Rate
值为null。它确实是Nullable<int>
吗?
如果RDetails.Rate
是Nullable<int>
,那么您可以...Sum(x => x.Rate ?? 0)
并避免例外。