通过NetFlix odata结果进行分页

时间:2010-11-08 00:23:44

标签: wcf-data-services odata netflix

我正在使用Netflix odata服务来更好地了解如何使用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完成的分页)。我的问题是如何让我的代码访问下一批数据和下一批数据?

1 个答案:

答案 0 :(得分: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);
}