Linq结果如果为空则为零

本文关键字:Linq 如果 结果 | 更新日期: 2023-09-27 18:15:48

怎么写呢:

            int result = database
                .Where(x => x.Name == "Criteria")
                .Sum(x => x.Count)) ?? 0;

返回和值,除非linq没有找到任何值,在这种情况下它将返回0。

编辑:该字段不能为空。

编辑2:我使用实体框架

Linq结果如果为空则为零

您的原始查询非常接近。您只需要转换您的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){ }