I have recently migrated this code to Entity Framework 4 and it is failing. Obviously if status does not have a value, return all matches, if it does have a value match ones where user.StatusID == 1.
return users.SingleOrDefault(
user =>
user.Username == username &&
user.EncryptedPassword == password &&
(!status.HasValue || user.StatusID == 1)
);
Exception returned:
ArgumentException: The specified value is not an instance of type 'Edm.Int32'
Parameter name: value
However, removing the conditional test and it works fine:
return users.SingleOrDefault(
user =>
user.Username == username &&
user.EncryptedPassword == password &&
user.StatusID == 1
);
Any ideas? How do you perform conditional testing in EF 4? Surely not separate if lines?
I use these conditional tests time and time again in Linq to Sql; it is really odd as to why this is not functioning in EF 4. There must be something simple going wrong, perhaps there is a recommended alternate way of doing things in EF 4.0.
Thanks for your help guys,
Graham
Edm.Int32? is it your own implementation ofSystem.Int32?