2011-03-30 3 views
1

나는 친구들을 관리 할 수있는 곳에서 페이스 북 응용 프로그램을 만들려고합니다. 이제 저는 일종의 고급 검색을하고 있습니다. 내 검색에 맞게 XML에 FQL 및 LINQ를 사용합니다.Linq to XML 쿼리 방법을 필터링하여 쿼리 결과를 필터링하십시오.

하지만 내 검색 방법을 재사용 할 수 있기를 바랍니다. 그래서 여러 개의 필터를 결합 할 수 있습니다.

private var friends; 


public setFriends(XDocument doc) 
     { 
      friends = (from usr in doc.Descendants("user") 

        select new User 
        { 
         name = usr.Element("name").Value, 
         email = usr.Element("email").Value, 
         pic = usr.Element("pic_square").Value, 
         city = usr.Element("city").Value, 


        }); 

     return friends; 

    } 



public void filterFriendsByName() 
    { 
     friends = // some code to filter my previous results by name 
    } 

public void filterFriendsByCity() 
    { 
     friends = // some code to filter friends by city 
    } 

//more filters 

당신이 볼 수 있듯이

, 난 아직 여기에 몇 가지 코드를 누락 :

여기에 내 생각이다. 나는 아직도 내 검색어를 여기에서 수정할 수 있는지 모르겠습니다. 어떻게 할 수 있는지 알려주시기 바랍니다. 아니면 가능한 한 올바른 방향으로 나를 가리켜 라.

감사합니다.

+1

귀하의 setFriends에는 return 문이 있지만 반환 형식이 정의되어 있지 않습니다. 또한 회원 변수 (친구)를 설정하는 경우이를 반환하지 않아도됩니다. 마지막으로 private var 친구를 정의 할 수 없습니다. 익명 형식을 초기화하지 않고 정의 할 수 없기 때문입니다. 그래서 만약 당신이 개인 IEnumberable 괜찮을 친구. – taylonr

답변

4

코드가 엉망이며 아직 컴파일되지 않습니다. 그러나이를 정리하고 오류를 수정하면 변수에 IEnumerable<User>이 표시됩니다. 그런 다음 filterFriendsByName 메소드에서 계속 필터링 할 수 있습니다.

public void filterFriendsByName(string name) 
{ 
    return friends.Where(x=> x.name == name); 
} 

friends

은 변경되지 않습니다,하지만 위의 방법 이름으로 친구를 필터링 반환합니다. 도시와 동일

+0

네, 여기에 좀 더 이해하기 쉽게 쿼리를 단순화했습니다. Thx 답장을 위해, 나는 그것을 즉시 시도 할 것이다. 나는 이것이 이것을 답으로 표시 할 수 있기를 희망한다. 왜냐하면 나는 여러 개의 중첩 된 select 문으로 작업하기 때문에 조금 더 복잡하기 때문이다. 중첩 쿼리에도 솔루션을 사용할 수 있기를 바랍니다. – ThdK

+0

얼마나 많은 중첩 된 선택을하든 관계없이 작동합니다. 이것을 체인이라고합니다. 첫 번째 필터는 setFriends를 호출 할 때 적용됩니다. filterFriendsByName은 다른 필터 체인 등을 추가합니다. IEnumerable의 평가가 시작되면 체인이 하나씩 평가됩니다. [쿼리 식] (http://msdn.microsoft.com/en-us/library/bb397676.aspx) – archil