在Linq中使用DefaultIfEmpty - 将null值替换为默认值

时间:2010-05-21 17:56:51

标签: c# linq

我有疑问可能有也可能没有question_group

如果所有问题都没有question_group,并且如果我使用默认值为空,请执行以下操作:

question_group defaultQuestion = new question_group {question_group_id = Guid.Empty};
questions.Select(x => x.question_group).DefaultIfEmpty(defaultQuestion).Distinct();

我不应该只包含我定义的默认question_group的IEnumerable<question_group>吗?我得到了......我在这里错过了什么?

1 个答案:

答案 0 :(得分:6)

我认为DefaultIfEmpty的工作方式与您的预期不同。如果您的问题没有问题组,则可能这意味着其问题组为空。 DefaultIfEmpty仅对 empty 枚举产生影响(即元素数量为零)。包含一些空值的可枚举不为空。

我认为您可能要做的是删除所有null的问题组,然后检查枚举是否为空。你可能想尝试这样的事情:

var questionGroups = questions.Select(x => x.question_group)
                              .Where(x => x != null)
                              .DefaultIfEmpty(defaultQuestion)
                              .Distinct();