如果查询未返回任何内容,则linq select item的默认值

时间:2012-11-27 12:19:13

标签: c# linq

如果where条件没有返回结果,如何在返回的集合中插入默认值?

from i in data.collection
where i.Type == type
select i.Count

3 个答案:

答案 0 :(得分:23)

使用Enumerable.DefaultIfEmpty方法执行此操作。

示例(在方法语法中因为恕我直言不太尴尬):

data.collection.Where(i => i.Type == type)
               .DefaultIfEmpty(defaultObject)
               .Select(i => i.Count);

答案 1 :(得分:8)

DefaultIfEmpty() 方法。

在方法语法中,您可以像这样使用它:

data.Collection
    .Where(i => i.Type == type)
    .DefaultIfEmpty(yourDefaultValue)
    .Select(i => i.Count);

如果Where过滤器未返回任何项目,则使用yourDefaultValue的可枚举项目作为Select投影的输入。

答案 2 :(得分:4)

您正在寻找DefaultIfEmpty

var itemCounts = from i in data.collection
                 where i.Type == type
                 select i.Count;

var itemCountsOrMinusOne = itemCounts.DefaultIfEmpty(-1);

第一个会给你项目计数,或者IEnumerable不会返回任何元素。

第二个会给你项目计数,或者只返回IEnuemrable的{​​{1}}。