2011-10-11 11 views
0

したがって、アプリケーションにASPメンバシップが設定されています。私はまた、非会員関連データを管理するための別々のユーザーテーブルを持っています。ユーザー管理の際、私のアプリケーションが両方のテーブルを照会することを確認する必要があります。私は承認されたユーザのリストを返す以下のコントローラを持っていますが、これを達成するためのより簡単な方法が必要であるようです。それを行う良い方法は何ですか?MembershipUserCollectionによるユーザーテーブルのフィルタリング

 QuoteExchangeDB _db = new QuoteExchangeDB(); 

     [MyAuthorize(Roles = "Administrator")] 
     public ActionResult Admin() 
     { 
      MembershipUserCollection agents = Membership.GetAllUsers(); 
      IEnumerable<MembershipUser> unfiltered = agents.Cast<MembershipUser>(); 
      var filtered = unfiltered.Where(u => u.IsApproved); 
      List<User> users = new List<User>(); 
      foreach (var item in filtered) 
      { 
       if (item.IsApproved) 
       { 
        Guid guid = (Guid)item.ProviderUserKey; 
        users.Add(_db.Users.Single(u => u.MembershipGuid.Equals(guid))); 
       } 
      } 
      return View(users); 
     } 
+0

'if(item.IsApproved)'ブロックは既にフィルタリングされているので、冗長であるようです。 –

+0

Lol ...私はLinqステートメントを追加する前にifステートメントを実行しました...私はそれをキャッチしませんでした。今修正。 –

答えて

2

これはおそらくLINQで単純な結合が必要なようです。

var filtered = Membership.GetAllUsers().Cast<MembershipUser>().Where(u => u.IsApproved); 

var users = from f in filtered 
     join u in _db.Users on ((Guid)f.ProviderUserKey) equals u.MembershipGuid 
     select u; 

あなたはおそらくそのさえのうちの1文を作ることができます:

var users = from f in Membership.GetAllUsers().Cast<MembershipUser>() 
    join u in _db.Users on ((Guid)f.ProviderUserKey) equals u.MembershipGuid 
    where f.IsApproved 
    select u; 

編集を:考えると、私はこの例で物事/原因の問題に影響を与える可能性のIQueryableでのIEnumerableを結ぶかどうかはわかりませんことを、here's a blog about doing that

+0

明日の朝にオフィスに入るとすぐに、私はこれを試してみよう!優れたアプローチ。 –

+0

調整なしで初めて動作しました! –

関連する問題