Linq结果如果为空则为零
本文关键字:Linq 如果 结果 | 更新日期: 2023-09-27 18:15:48
怎么写呢:
int result = database
.Where(x => x.Name == "Criteria")
.Sum(x => x.Count)) ?? 0;
返回和值,除非linq没有找到任何值,在这种情况下它将返回0。
编辑:该字段不能为空。
编辑2:我使用实体框架
您的原始查询非常接近。您只需要转换您的Count
变量:
int result = database
.Where(x => x.Name == "Criteria")
.Sum(x => (int?)x.Count) ?? 0;
这样做会比在Try/Catch中包装更有效和优雅。
我怀疑你正在使用实体框架。如果你只是使用链接到对象,其他人提供的解决方案就会起作用。
这应该可以正常工作(不需要??0):
var result = database
.Where(x => x.Name == "Criteria")
.Sum(x => x.Count))
除非你想检查x本身是否为空:
var result = database
.Where(x => x != null)
.Where(x => x.Name == "Criteria")
.Sum(x => x.Count))
你可以这样写:
int result = database
.Where(x => x.Name == "Criteria")
.Sum(x => x.Count));
如果没有结果,Enumerable.Sum
方法已经返回0。来自文档:
如果源不包含元素,则返回0。
这应该可以正常工作:
var result = database.Where(x => x.Name == "Criteria").Sum(x => x.Count));
如果Where
函数没有返回任何元素,则Sum
函数将返回0。
所有返回IEnumerable<T>
的Linq函数将返回一个空集合而不是null
。
使用Aggregate扩展方法,其中0是种子值
int sum = database.Where(x=>x.Name == "Criteria")
.Aggregate(0, (total, next) => total +=next);
我用了一种没有人会喜欢的方式,但保证100%的工作时间,看!
int result = 0;
try{
result = database
.Where(x => x.Name == "Criteria")
.Sum(x => x.Count));
} catch (Exception e){ }