Here’s what I’m trying to do:
public List<int> GetRolesForAccountByEmail(string email)
{
var account = db.Accounts.SingleOrDefault(a => a.Email == email);
if (account == null) return new List<int>();
return db.AccountRoles.Where(a => a.AccountId == account.AccountId).Select(a => Convert.ToInt32(a.RoleId)).ToList();
}
I had to convert to Int32 because I could not return a List<int?> when the method was to return a List<int>.
Any suggestions on how to solve this simple problem?
Instead of this:
Do this:
The reason is in the error description; when you are doing these queries through IQueryable, the methods being used within the selector have to be something that can be translated into a SQL query or function. In this case
Convert.ToInt32()is not such a method. Forintfields withnullallowed, using the .NET.Valueproperty does work, though.Note that this would not work if your
RoldIdisnull, however. You’ll get anInvalidOperationException. You might want to return a set value instead if the backing field is null:This will return the value if there is one, and
int.MinValueif not.