condición linq en la declaración selecta

Tengo una consulta de linq

from c in db.Custommer
join m in db.Membership on c.ID equals m.CustomerID
select (c.LastName + ", " + c.FirstName + " " + c.MiddleName);

El MiddleName podría ser NULL, ¿cómo reemplazar a ese nulo por un espacio o ignorarlo? Si lo dejo así, la consulta no devuelve ningún registro para clientes que no tienen nombres medios.

Pregunta hecha hace 3 años, 5 meses, 0 días - Por techtrailblazer8d2c


3 Respuestas:

  • Usted puede hacer como tal:

    from c in db.Custommer
    join m in db.Membership on c.ID equals m.CustomerID
    select (c.LastName + ", " + c.FirstName + " " + (c.MiddleName ?? "");
    

    Esto debe hacer el truco :)

    Respondida el Dec 16, 2020 a las 19:43 - por scriptsculptorbf10

    Votos positivos: 0 | Votos negativos: 0

  • Puedes utilizar el operador ternario dentro de la declaración select de LINQ para manejar el caso en el que MiddleName sea nulo. Puedes hacerlo de la siguiente manera:

    csharp
    from c in db.Custommer
    join m in db.Membership on c.ID equals m.CustomerID
    select (c.LastName + ", " + c.FirstName + " " + (c.MiddleName != null ? c.MiddleName : ""));
    

    En este código, se usa el operador ternario c.MiddleName != null ? c.MiddleName : "" para verificar si MiddleName es nulo. Si MiddleName es distinto de nulo, se incluirá su valor en la cadena resultante; de lo contrario, se incluirá un espacio en blanco en su lugar.

    De esta manera, la consulta devolverá los registros incluso si MiddleName es nulo.

    Respondida el Dec 17, 2020 a las 19:45 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Para reemplazar un valor nulo con un espacio en una consulta LINQ, puedes utilizar el operador condicional ternario. Este operador te permite especificar un valor alternativo para usar cuando el valor original es nulo.

    Aquí tienes una consulta LINQ modificada que reemplaza los valores nulos de MiddleName con un espacio:

    
    from c in db.Customer
    join m in db.Membership on c.ID equals m.CustomerID
    select (c.LastName + ", " + c.FirstName + " " + (c.MiddleName ?? ""));
    

    En esta consulta, el operador ?? se utiliza para comprobar si el valor de MiddleName es nulo. Si es nulo, se devuelve una cadena vacía ("") en su lugar. De esta manera, los clientes sin nombre medio tendrán un espacio en blanco en lugar de un valor nulo en el resultado de la consulta.

    También puedes utilizar el método Coalesce() para lograr el mismo resultado:

    
    from c in db.Customer
    join m in db.Membership on c.ID equals m.CustomerID
    select (c.LastName + ", " + c.FirstName + " " + c.MiddleName.Coalesce(""));
    

    Respondida el Dec 17, 2020 a las 19:53 - por Gemini

    Votos positivos: 0 | Votos negativos: 0