2010-05-21 14 views
5

tengo preguntas que pueden o no pueden tener un question_groupUsando DefaultIfEmpty en LINQ - problema de la sustitución de un valor nulo para un valor predeterminado

si todas las preguntas no tienen una question_group y si uso por defecto si está vacío como éste :

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

no debería tener una IEnumerable<question_group> que contiene sólo el question_group por defecto que he definido? Obtengo nulo ... ¿Qué me estoy perdiendo aquí?

Respuesta

6

Creo que DefaultIfEmpty funciona de forma diferente a la esperada. Si su pregunta no tiene grupo de preguntas, presumiblemente esto significa que su grupo de preguntas es nulo. DefaultIfEmpty solo tiene un efecto en enumerados vacíos (es decir, el número de elementos es cero). Un enumerable que contiene algunos nulos no está vacío.

Creo que lo que probablemente quiera hacer es eliminar todos los grupos de preguntas que son nulos y luego verificar si el enumerable está vacío. En su lugar, puede intentar algo como esto:

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

Gracias! Eso es lo que me estaba perdiendo. – FiveTools

Cuestiones relacionadas