我正在使用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&$orderby=AverageRating%20desc&$skiptoken=3.9D,'BVqRa'" />
这是一个将检索下一组数据的链接(由Netflix完成的分页)。我的问题是如何让我的代码访问下一批数据和下一批数据?
答案 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);
}