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

Fiv*_*ols 5 c# linq

我有问题,可能有也可能没有问题组

如果所有问题都没有question_group,如果我使用默认值为空,如下所示:

question_group defaultQuestion = new question_group {question_group_id = Guid.Empty};
questions.Select(x => x.question_group).DefaultIfEmpty(defaultQuestion).Distinct();
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 6

我认为DefaultIfEmpty与你的期望不同.如果您的问题没有问题组,则可能这意味着其问题组为空.DefaultIfEmpty只对空可枚举产生影响(即元素数为零).包含一些空值的可枚举不为空.

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

var questionGroups = questions.Select(x => x.question_group)
                              .Where(x => x != null)
                              .DefaultIfEmpty(defaultQuestion)
                              .Distinct();
Run Code Online (Sandbox Code Playgroud)