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

Fel*_*ani 5 c# linq nhibernate sum iqueryable

我有一个IQueryableNHibernate,我想有一个linq查询来总结一个特定的列,但是,当我的Where方法条件给我一个空的结果我不想得到一个异常,但我不想打一个查询获取所有记录并在内存之后总结,我想要像coalesesql命令一样的样本:

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

我必须做这样的事情:

// 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(); 
Run Code Online (Sandbox Code Playgroud)

有什么办法吗?

谢谢.

Die*_*hon 10

你需要强制Value转换为可空类型.

例如,假设Value是一个int属性:

var result = MyQueryable()
                 .Where(x => x.IsDone)
                 .Select(x => (int?)x.Value)
                 .Sum()
             ?? 0;
Run Code Online (Sandbox Code Playgroud)

由于Sum()on on a null null enumerable将为空源返回null,因此coalesce operator(??)会在发生这种情况时返回0.