在LINQ中像SQL一样应用ISNULL



我有下一个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

相关内容

最新更新