【发布时间】:2014-12-03 01:35:43
【问题描述】:
问题:
我有一个集合列表我需要通过 OData 参数($filter、$orderby 等)过滤这个集合 有什么我可以使用的东西可以满足我的需求吗?
产地:
SharePoint REST API 有一个阈值限制(5000 个项目),当列表有更多项目时会引发异常。这就是为什么这不起作用:
HOST/_vti_bin/listdata.svc/MyList?$filter=FieldName eq 'foo'&$orderby=OtherFIeld asc
我们可以获取所有项目,但不能像这样使用 OData 参数:
HOST/_vti_bin/listdata.svc/MyList
作为响应,我们将获得 __next 属性,我们可以在其中找到用于获取下一页数据的 url,它看起来像这样:
HOST/_vti_bin/listdata.svc/MyList?$skiptoken=4988
这就是我们获取所有物品的方式。现在我需要从初始请求中应用 OData 参数来过滤我这边的结果。我不知道该怎么做。
【问题讨论】:
-
我不太明白你的最后一句话。是否过滤结果包含超过 5000 项出现异常,您想找到一种方法来获取所有过滤后的项目?
-
@YiDing 不是,是的。当 SP 列表包含超过 5000 个项目时,任何 OData 过滤都会失败(您可以使用索引)。这就是我获取所有项目、将它们存储在 List
中并将原始 OData 参数应用于该列表的原因。结果我只得到了我需要的那些东西。 -
如何使用 "HOST/_vti_bin/listdata.svc/MyList?$filter=FieldName eq 'foo'&$orderby=OtherFIeld asc & $top=5000"?
-
$top 在这里没有帮助......阈值限制不仅适用于返回结果的数量,还适用于列表中的项目数。这就是为什么你不能 $orderby 或 $filter 超过 5000 个项目。
标签: c# odata iqueryable