如何在sharepoint 2010中使用内容迭代器

时间:2012-01-07 09:50:54

标签: sharepoint sharepoint-2010

我的列表中有7000个项目。我需要过滤列表并检索结果 我在我的网站部分使用以下代码。

string query = "<Where><BeginsWith><FieldRef Name='Project' /><Value Type='Text'>ab</Value></BeginsWith></Where>"
SPQuery spquery = new SPQuery();
spquery.Query = query;
ContentIterator iterator = new ContentIterator();
iterator.ProcessListItems(list, spquery, ProcessListItem, ProcessListItemError)

因为我正在使用ContentIterator,它仍然给我错误“禁止尝试的操作,因为它超出了管理员强制执行的列表视图阈值”

更新

string query2 = @"<Where><Eq><FieldRef Name='Project' /><Value Type='Text'>11759</Value></Eq></Where>"; 
SPQuery spquery = new SPQuery(); 
spquery.RowLimit = 10; 
spquery.Query = query2; 
spquery.QueryThrottleMode = SPQueryThrottleOption.Override; 
ContentIterator iterator = new ContentIterator(); 
iterator.ProcessListItems(list, spquery, ProcessListItem, ProcessListItemError); 

在每种情况下天气都使用SPCollectionItem或Iterator。我何时通过spquery中的where条件。同样的错误来了。

5 个答案:

答案 0 :(得分:2)

要有效地使用ContentIterator并避免限制异常,您应该明确包含OrderBy子句。

尝试使用实际启用索引的ContentIterator.ItemEnumerationOrderByNVPField。

有关详情,请查看

http://extreme-sharepoint.com/2012/07/17/data-access-via-caml-queries/

答案 1 :(得分:1)

可能因为您要比较的字段未编入索引:http://msdn.microsoft.com/en-us/library/ff798465

  

如果要构建一个返回前100个排序项的查询   通过ID字段,查询将在没有问题的情况下执行,因为ID   列总是被索引。但是,如果您要构建一个查询   返回按非索引标题字段排序的前100个项目   查询必须扫描内容数据库中的所有10,000行   为了在返回第一个之前按标题确定排序顺序   100件物品。因此,查询将受到限制,并且正确   所以这是一项资源密集型的运作。

答案 2 :(得分:0)

你要么......

  • ...在查询上设置低于配置阈值的RowLimit
  • ...或定义一个返回较少项目的查询。
  • 列表的
  • ...或change the threshold

答案 3 :(得分:0)

你见过这个:

msdn link

嗯,刚尝试了这个,它仍然出错了。如果我使用它,但我可以迭代超过7k列表项:

private int GetItems(SPList list){
    var query = new SPQuery();
    query.Query = "";
    query.QueryThrottleMode = SPQueryThrottleOption.Override;
    var items = list.GetItems(query);
    return items.Count;

}

所以我的建议就是使用list.getitems

答案 4 :(得分:0)

您只需要更改查询。

    //Keep your query inside <View></View> tag.
    string query = "<View><Where><BeginsWith><FieldRef Name='Project' /><Value Type='Text'>ab</Value></BeginsWith></Where><View>" 
    SPQuery spquery = new SPQuery(); 
    spquery.Query = query; 
    ContentIterator iterator = new ContentIterator(); 
    iterator.ProcessListItems(list, spquery, ProcessListItem, ProcessListItemError) 

现在运行该程序,它将起作用。