2016-06-30 3 views
0

CheckboxListを作成して、Userのロールをチェックし、Availableオプションをすべて表示すると、UIはOKです。しかし、次のコードは動作しません。Select式の中にContainsを使用する

 var applicationUser = db.AspNetUsers.Include(x => x.AspNetRoles) 
           .FirstOrDefault(x => x.Id == id.Value); 

     if (applicationUser == null) 
     { 
      return HttpNotFound(); 
     } 


     var model = new ViewModels.UsuarioViewModel(); 

     model.Id = applicationUser.Id; 
     model.UserName = applicationUser.UserName; 
     model.Name = applicationUser.Name; 
     model.Email = applicationUser.Email; 
     model.EmailConfirmed = applicationUser.EmailConfirmed; 
     model.PhoneNumber = applicationUser.PhoneNumber; 
     model.PhoneNumberConfirmed = applicationUser.PhoneNumberConfirmed; 
     model.Active = applicationUser.Active; 


     model.RolesList = db.AspNetRoles.Select(r => new SelectListItem 
          { 
           Selected = 
           applicationUser.AspNetRoles.Contains(x => x.Id == r.Id), 
           Text = r.Name, 
           Value = r.Name 
          }).ToList(); 
     return View(model); 

RolesListは問題 "が選択= applicationUser.AspNetRoles.Contains(X => x.Id == r.Id)" の部分であるIEnumerableをSelectListItem

あります。

編集:

[OK]を、今私は、作業コードを持っている:

model.RolesList = db.AspNetRoles.ToList().Select(r => new SelectListItem 
          { 
           Selected = (applicationUser.AspNetRoles. 
              Where(x => x.Id == r.Id).ToList().Count > 0), 
           //Selected = false, 
           Text = r.Name, 
           Value = r.Name 
          }); 

私はそれが含まれてを使用して動作させることができませんでした。

私は、この式にcontainsを使用する方法があるかどうかを知りたいと思います。 +カウントは間違っています。あなたはいけない

+0

ですあなたが割り当てているブール値の結果は大丈夫ですか?つまり、プロパティの設定に問題があるのですか、それとも式にありますか?投稿する前にちょっとデバッグしないでください。 –

+0

@ D.Petrov表現が間違っています。 デバッグはオプションではありませんでした。 "Selected = false"に変更し、Where + Countを使用して作業することができたら... Listでlinqを使用する前にToList()を追加します。 –

答えて

1

あなたはany

Selected = applicationUser.AspNetRoles.Any(x => x.Id == r.Id), 

containsをしたい、含まれている特定の要素がまったくコレクションではなく、同じものであるかどうかを検索します、私はあなたのコードがコンパイルすら驚いています

関連する問題