es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Alguna alternativa para esta consulta LINQ ‘Where’?

Tengo esta consulta de LINQ. Necesito buscar alguna buena alternativa, si es posible, para esta expresión lambda resaltada dentro de la condición Where. Estaba pensando en usar la condición coalesce ( ?? ) pero no pude hacer una consulta.

Entonces, quiero obtener aquellos elementos de la lista que tienen una propiedad nula o, si no es nula, cumple una condición ( Contains() ).

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una alternativa a la expresión lambda resaltada dentro de la condición Where podría ser usar el operador de fusión nula (??) de la siguiente manera:

    .Where(p => (p.Property?.SubPropertyList ?? new List<subproperty>()).Contains(Item))
    

    En esta expresión, el ? verifica si p.Property es nulo o no. Si no es nulo, entonces se accede a la propiedad SubPropertyList y se aplica el método Contains a ella. De lo contrario, el operador ?? devuelve una lista vacía y se aplica el método Contains a ella. De esta manera, podemos manejar el caso en el que p.Property es nulo sin causar una excepción de referencia nula.

    Otra alternativa podría ser usar el método Any de la siguiente manera:

    .Where(p => p.Property == null || p.Property.SubPropertyList.Any(sp => sp == Item))
    

    Esta expresión verifica si p.Property es nulo y devuelve verdadero en ese caso. De lo contrario, aplica el método Any a la propiedad SubPropertyList para verificar si contiene el Item. Si alguna de estas condiciones es verdadera, el elemento se incluye en el conjunto de resultados.

Comments are closed.