我们有一个包含 50.000 个项目的 SharePoint 列表,并希望从中获取一些数据而不禁用 SP2010 的默认限制。
来自 MSDN关于处理大型列表,我们认为关键因素是在 SPQuery 上使用一个小的 RowLimit,并使用 ListItemCollectionPosition 进行批处理。
但是,对于我们这样的代码(某些东西),仍然会触发限制异常:
SPQuery query = new SPQuery();
query.Query = "<Where><Contains><FieldRef Name=\"MatterName\" /><Value Type=\"Text\">7476922</Value></Contains></Where>";
query.ViewFields = "<FieldRef Name=\"MatterName\"/>";
query.RowLimit = 10;
int index = 0;
do
{
SPListItemCollection batch = mattersList.GetItems( query );
query.ListItemCollectionPosition = batch.ListItemCollectionPosition;
}
while ( query.ListItemCollectionPosition != null );
根据 SharePoint Connections 2010 的 MVP 专家的说法,这是设计使然,因为结果集上的隐式排序仍会触发 5000 项限制阈值。
哪个很好,但是我们如何从这个列表中获取呢?会使用 ContentIterator是更好的选择?如果是这样,内容迭代器为实现这一目标而发挥的魔力是什么?
最佳答案
您可以使用:
query.QueryThrottleMode = SPQueryThrottleOption.Override;
通过以 super 用户身份执行查询。
http://adicodes.com/sharepoint-2010-list-throtelling/
关于sharepoint - 如何从启用了限制的大列表中获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3833475/