2012-04-12 87 views
11

に翻訳することはできません方法がList<int>を返すときに私がList<int?>を返すことができなかったのでInt32に変換する。LINQは方法「のInt32 ToInt32(System.Objectの)」メソッドを認識しない、そしてこの方法は、ストア式

この簡単な問題を解決する方法についてのご意見はありますか?これに代えて

+0

私は 'Convert'機能は、エンティティへのLINQでは動​​作しないだろうと思い、それはあなたが' db.AccountRulesを行う可能性があります。 AsEnumerable() 'と残りの部分は – V4Vendetta

答えて

19

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

これを行う:

Select(a => a.RoleId.Value) 

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

ただし、RoldIdnullの場合、これは機能しません。 InvalidOperationExceptionが表示されます。あなたはバッキングフィールドがnullの場合代わりに設定値を返すようにしたいかもしれません:

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

1、およびint.MinValueない場合がある場合、これは値を返します。

5

使用この: 選択db.AccountsからListオブジェクトを取得し、ものを行うために(=>(INT)a.RoleId)

+0

これは私のために働いた。 @アンドリューバーバーの答えはしなかった。ありがとう、muthuvel。 – user2330678

+0

これは他人がいないところで働いていました - ありがとう – Lyall

0

してみてください。 それは私のために働く。

この代わりの
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(); 
    } 
関連する問題