8

我有一个IQueryableNHibernate 并且我想要一个 linq 查询来对特定列求和,但是,当我的Where方法条件给我一个空结果时,我不想得到一个异常,但我不想打一个查询要获取所有记录并在内存中求和,我想要类似coalesesql 命令的示例:

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

有什么办法吗?

谢谢你。

4

1 回答 1

12

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

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

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

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

于 2013-04-26T21:57:15.933 回答