2010-11-08 5 views
2

Я играю с услугой odfl Netflix, чтобы лучше понять, как потреблять данные одаты.paging через результаты NetFlix odata

В VS 2010 я добавил сервисную ссылку на службу odata NetFlix. Затем я написал этот код, который возвращает только некоторые данные.

 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, который возвращает результаты как QueryOperationResponse, который имеет метод GetContinuation, который возвращает объект продолжения, представляющий следующую ссылку. Грубый кода, чтобы пройти через все названия может выглядеть следующим образом:

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 показывает следующие и предыдущие кнопки. Не могли бы вы посоветовать мне то же самое? –

+2

Серверный ведомый только вперед. Таким образом, он действительно может получить только следующую страницу. Вам нужно будет запомнить предыдущую страницу самостоятельно. Возможно, было бы лучше, если бы вы использовали пейджинг, управляемый клиентом. Например, ~/Titles? $ Top = 10 & $ skip = 20 (это получает третью страницу размера 10). Если ваше верхнее значение меньше предела размера страницы на сервере, вы не увидите продолжения вообще. И вы можете легко вычислить URL-адрес для ваших предыдущих и следующих кнопок. –