当集合为空时,使用Sum方法和Nhibernate不会得到异常

本文关键字:Nhibernate 异常 方法 Sum 集合 使用 | 更新日期: 2023-09-27 18:11:07

我有一个带有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(); 

有办法吗?

谢谢。

当集合为空时,使用Sum方法和Nhibernate不会得到异常

您需要将Value强制转换为可空类型。

例如,假设Valueint的属性:

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

由于可空枚举对象的Sum()对于空源将返回null,因此合并操作符(??)在发生这种情况时负责返回0。