【问题标题】:paging through NetFlix odata results通过 NetFlix odata 结果分页
【发布时间】:2011-05-06 10:46:30
【问题描述】:

我正在使用 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 完成的分页)。我的问题是如何让我的代码访问下一批数据和下一批等?

【问题讨论】:

    标签: wcf-data-services odata netflix


    【解决方案1】:

    查询可以转换为 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);
    }
    

    【讨论】:

    • Vitek,我正在尝试在显示下一个和上一个按钮的 WPF 中实现这一点。你能不能给我同样的建议?
    • 服务器驱动的分页只向前。所以它真的只能得到下一页。您必须自己记住前一页。如果您使用客户端驱动的分页,也许会更好。例如 ~/Titles?$top=10&$skip=20 (这将获得大小为 10 的第三页)。如果您的最高值小于服务器上的页面大小限制,您将根本看不到延续。而且您可以轻松计算出上一个和下一个按钮要点击的 URL。
    猜你喜欢
    • 2011-10-31
    • 2015-04-12
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 2022-08-02
    • 1970-01-01
    • 2019-02-17
    • 2020-11-13
    相关资源
    最近更新 更多