Recientemente migré este código a Entity Framework 4 y está fallando. Obviamente, si el estado no tiene un valor, devuelve todas las coincidencias, si tiene un valor que coincida con user.StatusID == 1
.Consulta LINQ condicional simple en Entity Framework 4
return users.SingleOrDefault(
user =>
user.Username == username &&
user.EncryptedPassword == password &&
(!status.HasValue || user.StatusID == 1)
);
excepción devuelta:
ArgumentException: The specified value is not an instance of type 'Edm.Int32'
Parameter name: value
Sin embargo, la eliminación de la prueba condicional y funciona bien:
return users.SingleOrDefault(
user =>
user.Username == username &&
user.EncryptedPassword == password &&
user.StatusID == 1
);
¿Alguna idea? ¿Cómo se realizan las pruebas condicionales en EF 4? Seguramente no separar si las líneas?
Utilizo estas pruebas condicionales una y otra vez en Linq a Sql; es realmente extraño por qué esto no funciona en EF 4. Debe haber algo simple que va mal, tal vez haya una forma alternativa recomendada de hacer las cosas en EF 4.0.
Gracias por su ayuda chicos,
Graham
what the 'Edm.Int32'? ¿Es su propia implementación de 'System.Int32'? – Stecya
@Stecya: http://msdn.microsoft.com/en-us/library/bb387164.aspx, parece ser algunas partes internas de EF. – Euphoric