2011-03-30 24 views
1

我正在試圖製作一個Facebook應用程序,我可以管理我的朋友。現在我正在進行一些高級搜索。我使用FQL和LINQ to XML來適應我的搜索。可重複使用的Linq到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語句,但沒有定義返回類型。另外,如果你設置了一個成員變量(朋友),你不需要返回它。最後,你不能定義私人變種朋友。因爲不能初始化匿名類型。所以,如果你有私人的IEnumberable 朋友,那很好。 – taylonr 2011-03-30 13:49:13

回答

4

你的代碼很混亂,不會編譯。但是當你清理它並糾正錯誤時,最後你會看到friends變量將得到IEnumerable<User>。之後,您可以繼續過濾filterFriendsByName方法,就像這樣。

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

friends將不會改變,但上述方法將返回過濾朋友的名字。同城

+0

是的,我只是簡化了我的查詢在這裏更容易理解。 Thx的答覆,我會立即嘗試。我希望我可以將此標記爲答案。因爲它更復雜,因爲我正在處理多個嵌套的select語句。我希望我也可以使用你的解決方案嵌套查詢。 – ThdK 2011-03-30 14:06:14

+0

無論你有多少嵌套選擇 - 它會工作。這就是所謂的鏈接。調用setFriends時應用第一個過濾器。 filterFriendsByName添加另一個過濾器鏈等。在評估IEnumerable開始時,它會逐一評估鏈。請參閱[Query Expressions](http://msdn.microsoft.com/zh-cn/library/bb397676.aspx) – archil 2011-03-30 14:15:04