我该如何写这样的东西:
int result = database
.Where(x => x.Name == "Criteria")
.Sum(x => x.Count)) ?? 0;
除非 linq 没有找到任何东西,否则它将返回总和值,在这种情况下它将返回 0。
编辑:该字段不能为空。
编辑 2:我正在使用实体框架。
我该如何写这样的东西:
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 中更有效和优雅。
我怀疑您正在使用实体框架。如果您只是使用 Linq-to-Objects,那么其他人提供的解决方案将会奏效。
这应该可以正常工作(不需要?? 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
方法已经在没有结果时返回零。从文档中:
如果 source 不包含任何元素,则返回零。
这应该可以正常工作:
var result = database.Where(x => x.Name == "Criteria").Sum(x => x.Count));
如果该函数没有返回任何元素,Where
则该Sum
函数将返回 0。
所有返回 an 的 Linq 函数IEnumerable<T>
都将返回一个空集合而不是null
.
使用聚合扩展方法,其中 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){ }