15

这是我正在尝试做的事情:

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();
}

List<int?>我不得不转换为 Int32,因为当方法要返回a 时我无法返回 a List<int>

关于如何解决这个简单问题的任何建议?

4

3 回答 3

26

而不是这个:

Select(a => Convert.ToInt32(a.RoleId))

做这个:

Select(a => a.RoleId.Value)

原因在错误描述中;当您通过 IQueryable 执行这些查询时,选择器中使用的方法必须是可以转换为 SQL 查询或函数的东西。在这种情况下Convert.ToInt32()不是这样的方法。不过,对于允许的int字段,使用 .NET属性确实有效。null.Value

RoldId请注意,如果您的is ,这将不起作用null。你会得到一个InvalidOperationException. 如果支持字段为空,您可能希望返回一个设置值:

Select(a => a.RoleId.HasValue ? a.RoleId.Value : int.MinValue)

如果有,这将返回值,int.MinValue如果没有。

于 2012-04-12T05:34:47.357 回答
6

使用这个: Select(a => (int)a.RoleId)

于 2013-01-10T07:05:16.413 回答
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();
    }
于 2014-05-30T15:29:06.957 回答