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:
Select(a => Convert.ToInt32(a.RoleId))
Do this:
Select(a => a.RoleId.Value)
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. For int
fields with null
allowed, using the .NET .Value
property does work, though.
Note that this would not work if your RoldId
is null
, however. You'll get an InvalidOperationException
. You might want to return a set value instead if the backing field is null:
Select(a => a.RoleId.HasValue ? a.RoleId.Value : int.MinValue)
This will return the value if there is one, and int.MinValue
if not.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With