2013-04-26 33 views
5

我有一个IQueryable与NHibernate和我想有一个LINQ查询来总结一个特定的列,但是,当我的条件Where方法给我一个空的结果我不希望得到一个异常,但我不希望打一个查询来获取所有的记录,它的内存总结后,我想是这样coalese SQL命令,样品:集合为空时与Sum方法和Nhibernate不会收到异常

// 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(); 

有什么办法吗?

谢谢。

+0

关于使用Any运算符的if条件怎么样? – gustavodidomenico 2013-04-26 18:04:20

+0

你尝试过'DefaultIfEmpty'吗? – I4V 2013-04-26 18:16:53

+0

NHibernate的Linq不支持'DefaultIfEmpty' :( – 2013-04-26 18:26:48

回答

7

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

例如,假设Valueint属性:

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

由于可为空的枚举将返回null对于空源的Sum(),聚结操作者(??)取返回0当发生这种情况的护理。

相关问题