Ray*_*phy 0 c# entity-framework linq-to-sql
using (AdviserReserveEntities Adv=new AdviserReserveEntities())
{
decimal sum= Adv.Credits.Where(u => u.UserIdRef == 2).Sum(a => a.Amount);
}
Run Code Online (Sandbox Code Playgroud)
如果在发生异常后没有找到记录:
转换为值类型"Int64"失败,因为具体化值为null.结果类型的泛型参数或q`uery必须使用可空类型.
如果没有记录,如何返回0?
一种方法是使用可空类型:
decimal? sum = Adv.Credits
.Where(u => u.UserIdRef == 2)
.Sum(a => (decimal?)a.Amount);
Run Code Online (Sandbox Code Playgroud)
观察总和表达式中的强制转换.这样,当没有元素时,您将返回null.您可以添加coalesce运算符以获取默认值:
decimal sum = Adv.Credits
.Where(u => u.UserIdRef == 2)
.Sum(a => (decimal?)a.Amount)
?? 0;
Run Code Online (Sandbox Code Playgroud)
Raphael和Justin提到的解决方案更糟糕,因为首先使用Any()进行检查将导致两个数据库查询而不是一个.
| 归档时间: |
|
| 查看次数: |
1214 次 |
| 最近记录: |