0
using (AdviserReserveEntities Adv=new AdviserReserveEntities())
{
   decimal sum= Adv.Credits.Where(u => u.UserIdRef == 2).Sum(a => a.Amount);
}

如果没有找到记录,则发生以下异常:

转换为值类型“Int64”失败,因为具体化值为空。结果类型的泛型参数或查询必须使用可为空的类型。

如果没有找到记录,如何返回 0?

4

2 回答 2

6

一种方法是使用可为空的类型:

decimal? sum = Adv.Credits
                  .Where(u => u.UserIdRef == 2)
                  .Sum(a => (decimal?)a.Amount);

观察 sum 表达式中的转换。这样,当没有元素时,您将返回 null。您可以添加合并运算符以获得默认值:

decimal sum = Adv.Credits
                 .Where(u => u.UserIdRef == 2)
                 .Sum(a => (decimal?)a.Amount)
              ?? 0;

Raphael 和 Justin 提到的解决方案更糟糕,因为首先使用 Any() 进行检查将导致两个数据库查询而不是一个。

于 2013-10-22T16:10:38.100 回答
0
var records = Adv.Credits.Where(u => u.UserIdRef == 2);
decimal sum = records.Any() ? records.Sum(a => a.Amount) : 0m;
于 2013-10-22T16:02:30.047 回答