如果没有记录,如何选择sum或0?

时间:2013-10-22 16:00:51

标签: c# entity-framework linq-to-sql

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

如果在发生异常后没有找到记录:

  

转换为值类型'Int64'失败,因为具体化值   一片空白。结果类型的泛型参数或q`uery必须   使用可空类型。

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

2 个答案:

答案 0 :(得分:6)

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

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

在总和表达式中观看演员表。这样,当没有元素时,您将返回null。您可以添加coalesce运算符以获取默认值:

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

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

答案 1 :(得分:0)

var records = Adv.Credits.Where(u => u.UserIdRef == 2);
decimal sum = records.Any() ? records.Sum(a => a.Amount) : 0m;