在LINQ中应用ISNULL,就像SQL一样

时间:2014-05-13 14:02:50

标签: sql-server linq tsql linq-to-entities isnull

我有下一个LINQ,其中 o.Value p.Value 是十进制类型

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'类型的操作数   '小数'

1 个答案:

答案 0 :(得分:0)

当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