我有下一个LINQ 0。值和p。值为十进制类型
from o in dbContext.Ammounts
where o.Value > (from p in dbContext.Payments select p).Sum(p => p.Value))
内部LINQ from p in dbContext.Payments select p).Sum(p => p.Value)
可以返回NULL值,我需要应用ISNULL(linq_sentence, 0)
我试着这样做:
from o in dbContext.Ammounts
where o.Value > ((from p in dbContext.Payments select p).Sum(p => p.Value)) ?? 0m)
但是我得到这个消息错误:
操作符的? ?'不能应用于'decimal'和类型的操作数"小数"
当集合在Linq2SQL中为空时,聚合返回null
。如果聚合的值不可为空,则会抛出异常。要解决这个问题,可以将聚合的值强制转换为可空类型。
from o in dbContext.Ammounts
where o.Value > ((from p in dbContext.Payments select p)
.Sum(p => (decimal?)p.Value)) ?? 0m);
更多信息:http://weblogs.asp.net/zeeshanhirani/archive/2008/07/15/applying-aggregates-to-empty-collections-causes-exception-in-linq-to-sql.aspx