2010-11-08 52 views
2

我在玩Netflix odata服務,以更好地瞭解如何使用odata數據。通過NetFlix odata結果翻頁

在VS 2010中,我添加了對NetFlix odata服務的服務引用。然後我編寫了只返回一些數據的代碼。

 var cat = new NetflixCatalog(new Uri("http://odata.netflix.com/v1/Catalog/")); 

     var x = from t in cat.Titles 
       where t.ReleaseYear == 2009 
       select t; 

     foreach (Title title in x) 
     { 
      ProcessTitle(title); 
     } 

我看着爲呼叫生成的uri並在瀏覽器中運行它。它返回原子進料具有在端部

<link rel="next" href="http://odata.netflix.com:20000/v1/Catalog/Titles()/?$filter=ReleaseYear%20eq%202009&amp;$orderby=AverageRating%20desc&amp;$skiptoken=3.9D,'BVqRa'" /> 

這是將檢索下一組數據(尋呼由Netflix的完成)的一個鏈接這個元素。我的問題是如何讓我的代碼訪問下一批數據和下一個等等?

回答

7

該查詢可以轉換爲DataServiceQuery,它具有一個名爲Execute的方法,該方法將結果返回爲具有GetContinuation方法的QueryOperationResponse,該方法返回表示下一個鏈接的繼續對象。 一個粗略的代碼要經過所有的標題看起來是這樣的:

var cat = new NetflixCatalog(new Uri("http://odata.netflix.com/v1/Catalog/")); 

var x = from t in cat.Titles 
     where t.ReleaseYear == 2009 
     select t; 
var response = (QueryOperationResponse<Title>)((DataServiceQuery<Title>)x).Execute(); 

while (true) 
{ 
    foreach (Title title in response) 
    { 
     Console.WriteLine(title.Name); 
    } 

    var continuation = response.GetContinuation(); 
    if (continuation == null) 
    { 
     break; 
    } 

    response = cat.Execute(continuation); 
} 
+0

維特克,我想在WPF實現這個顯示下一個和上一個按鈕。你可以請教我一樣嗎? – 2012-05-08 00:55:36

+2

服務器驅動的分頁僅爲前向。所以它真的只能得到下一頁。你必須自己記住上一頁。也許如果你使用客戶端驅動的分頁會更好。因此,例如〜/ Titles?$ top = 10&$ skip = 20(這會得到大小爲10的第三頁)。如果您的最大值小於服務器上的頁面大小限制,則根本看不到延續。並且您可以輕鬆計算要點擊上一個和下一個按鈕的網址。 – 2012-05-08 08:31:58