这是我正在尝试做的事情:
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();
}
我必须转换为Int32,因为当方法返回List<int?>
时,我无法返回List<int>
。
关于如何解决这个简单问题的任何建议?
答案 0 :(得分:22)
而不是:
Select(a => Convert.ToInt32(a.RoleId))
这样做:
Select(a => a.RoleId.Value)
原因在于错误描述;当您通过IQueryable进行这些查询时,选择器中使用的方法必须是可以转换为SQL查询或函数的方法。在这种情况下,Convert.ToInt32()
不是这种方法。对于允许int
的{{1}}字段,使用.NET null
属性确实有效。
请注意,如果您的.Value
为RoldId
,则无效。你会得到null
。如果支持字段为空,您可能希望返回设置值:
InvalidOperationException
如果有值,则返回值,如果不存在,则返回Select(a => a.RoleId.HasValue ? a.RoleId.Value : int.MinValue)
。
答案 1 :(得分:6)
使用此: 选择(a =&gt;(int)a.RoleId)
答案 2 :(得分:0)
尝试从db.Accounts中获取List对象并执行操作。 它对我有用。
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();
}
而不是这个,试试这个..
public List<int> GetRolesForAccountByEmail(string email)
{
var account = db.Accounts.SingleOrDefault(a => a.Email == email);
if (account == null) return new List<int>();
List<AccountRoles> accountRoles= db.AccountRoles.ToList<AccountRoles>();
return accountRoles.Where(a => a.AccountId == account.AccountId).Select(a => Convert.ToInt32(a.RoleId)).ToList();
}