Linq结果如果为null则为零

Bil*_*ill 3 c# linq entity-framework

我怎么写这样的东西:

            int result = database
                .Where(x => x.Name == "Criteria")
                .Sum(x => x.Count)) ?? 0;
Run Code Online (Sandbox Code Playgroud)

除非linq没有找到任何东西,否则它将返回总和值,它将返回0.

编辑:该字段不能为空.

编辑2:我正在使用实体框架.

Bra*_*Rem 17

您与原始查询非常接近.您只需要转换Count变量:

int result = database
    .Where(x => x.Name == "Criteria")
    .Sum(x => (int?)x.Count) ?? 0;
Run Code Online (Sandbox Code Playgroud)

这样做比将它包装在Try/Catch中更有效率和优雅.

我怀疑你正在使用Entity Framework.如果你只是使用Linq-to-Objects,那么其他人提供的解决方案就可以了.


Kav*_*ian 5

这应该工作正常(不需要?? 0):

var result = database
.Where(x => x.Name == "Criteria")
.Sum(x => x.Count))
Run Code Online (Sandbox Code Playgroud)

除非你想检查x本身是否为null:

var result = database
.Where(x => x != null)
.Where(x => x.Name == "Criteria")
.Sum(x => x.Count))
Run Code Online (Sandbox Code Playgroud)


Ree*_*sey 5

你可以写:

int result = database
            .Where(x => x.Name == "Criteria")
            .Sum(x => x.Count));
Run Code Online (Sandbox Code Playgroud)

Enumerable.Sum方法在没有结果的情况下已经返回零.从文档:

如果source不包含任何元素,则返回零.