2011-10-11 3 views
0

그래서 내 응용 프로그램에 ASP 멤버쉽을 설정했습니다. 또한 비회원 관련 데이터를 관리하기위한 별도의 User 테이블이 있습니다. 사용자 관리 중에 내 응용 프로그램이 두 테이블 모두를 쿼리하는지 확인해야합니다. 승인 된 사용자 목록을 반환하는 아래 컨트롤러가 있지만이를 수행하는 간단한 방법이있는 것 같습니다. 그것을하는 더 좋은 방법은 무엇입니까? 당신은 아마 간단한 LINQ에 참여하려는처럼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

이 보인다.

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; 

편집 : 감안할 때 나는이 인스턴스에서 일/원인 문제에 영향을 미칠 수 있습니다을 IQueryable로를 IEnumerable 가입 방법을 잘 아니에요 , here's a blog about doing that.

+0

내일 아침에 사무실에 들어가 자마자 이걸 시험해 볼거야! 탁월한 접근법. –

+0

조정없이 처음으로 작동했습니다. –