2011-10-11 34 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

大声笑...我在添加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; 

你也许可以做一个声明出来的,即使是:

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; 

编辑:既然我不知道如何加入一个IEnumerable与IQueryable的可能影响的事情/事业的问题在这种情况下,here's a blog about doing that

+0

明天早上我进办公室时,我会试试这个!优秀的方法。 –

+0

这是第一次没有调整! –