使用Sum方法和Nhibernate在集合为空时不会出现异常

时间:2013-04-26 17:58:34

标签: c# linq nhibernate sum iqueryable

我有一个带有NHibernate的IQueryable我希望有一个linq查询来对特定列进行求和,但是,当我在Where方法上的条件给我一个空结果时,我不想得到一个例外,但是我不想点击查询来获取所有记录,在它对内存求和之后,我想要像coalese sql命令那样的样本:

// I get exception when its empty
var query = MyQueryable()
              .Where(x => x.IsDone)
              .Select(x => x.Value)
              .Sum(); 

我必须做这样的事情:

// I get 0, its ok, but ToList(), list all records on memory, 
// I just want to get a single value

var query = MyQueryable()
               .Where(x => x.IsDone)
               .Select(x => x.Value)
               .ToList()
               .Sum(); 

有什么办法吗?

谢谢。

1 个答案:

答案 0 :(得分:8)

您需要将Value转换为可以为空的类型。

例如,假设Valueint属性:

var result = MyQueryable()
                 .Where(x => x.IsDone)
                 .Select(x => (int?)x.Value)
                 .Sum()
             ?? 0;

由于可空可枚举的Sum()将为空源返回null,因此合并运算符(??)会在发生这种情况时返回0。