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.

Comportamiento de Entity Framework con espacios en blanco.

Tengo un escenario en el que necesito permitir duplicados vacíos y rechazar otros tipos de duplicados, por lo que estoy revisando los registros existentes antes de insertar uno nuevo utilizando la siguiente consulta.

this.dbContext.Employees.FirstOrDefault(t =>!string.IsNullOrEmpty(t.Name) && !string.IsNullOrEmpty(newRecord.Name) && t.Name.Trim().Equals(newRecord.Name.Trim(), StringComparison.InvariantCultureIgnoreCase));

El problema es que cuando tengo datos como los siguientes:

oldRecord.Name=” ”

newRecord.Name=” ”

La consulta anterior devuelve Null, lo cual es extraño porque

el resultado de !string.IsNullOrEmpty(” “) es true
el resultado de ” “.Trim().Equals(” “.Trim(), StringComparison.InvariantCultureIgnoreCase) es true

Así que la consulta anterior debería darme resultados.

¿Alguna idea de por qué estoy obteniendo este comportamiento? ¿Y la consulta anterior será evaluada en el lado del cliente?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está relacionado con el método FirstOrDefault. Este método devolverá el primer elemento de la secuencia que satisface la condición especificada por la expresión lambda. Como los dos strings están vacíos, la condición no se cumple y el método devuelve null.

    Para resolver este problema, puedes utilizar el método Any en lugar de FirstOrDefault. Este método devolverá true si algún elemento de la secuencia satisface la condición especificada por la expresión lambda.


    this.dbContext.Employees.Any(t =>!string.IsNullOrEmpty(t.Name) && !string.IsNullOrEmpty(newRecord.Name) && t.Name.Trim().Equals(newRecord.Name.Trim(), StringComparison.InvariantCultureIgnoreCase));

    La consulta se evaluará en el lado del servidor.

Comments are closed.