我有一个带有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();
有什么办法吗?
谢谢。
答案 0 :(得分:8)
您需要将Value
转换为可以为空的类型。
例如,假设Value
是int
属性:
var result = MyQueryable()
.Where(x => x.IsDone)
.Select(x => (int?)x.Value)
.Sum()
?? 0;
由于可空可枚举的Sum()
将为空源返回null,因此合并运算符(??
)会在发生这种情况时返回0。