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?>メソッドが a を返すときにa を返すことができなかったため、Int32 に変換する必要がありましたList<int>

この単純な問題を解決する方法について何か提案はありますか?

4

3 に答える 3

26

これの代わりに:

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

これを行う:

Select(a => a.RoleId.Value)

その理由はエラーの説明にあります。IQueryableを介してこれらのクエリを実行する場合、セレクター内で使用されるメソッドは、SQLクエリまたは関数に変換できるものである必要があります。この場合Convert.ToInt32()、そのような方法ではありません。ただし、許可されているintフィールドnullの場合、.NET.Valueプロパティを使用しても機能します。

RoldIdただし、これはあなたの場合は機能しないことに注意してくださいnull。を取得しInvalidOperationExceptionます。バッキングフィールドがnullの場合は、代わりに設定値を返すことをお勧めします。

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 に答える