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

Sharepoint 如何在sharepoit 2010中使用内容迭代器,sharepoint,sharepoint-2010,Sharepoint,Sharepoint 2010,我的清单上有7000项。我需要过滤列表并检索结果 我正在我的Web部件中使用以下代码 string query = "<Where><BeginsWith><FieldRef Name='Project' /><Value Type='Text'>ab</Value></BeginsWith></Where>" SPQuery spquery = new SPQuery(); spquery.Query = qu

我的清单上有7000项。我需要过滤列表并检索结果 我正在我的Web部件中使用以下代码

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)
string query=“ab”
SPQuery SPQuery=新建SPQuery();
spquery.Query=Query;
ContentIterator迭代器=新ContentIterator();
ProcessListItems(列表、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); 
stringquery2=@“11759”;
SPQuery SPQuery=新建SPQuery();
spquery.RowLimit=10;
spquery.Query=query2;
spquery.QueryThrottleMode=SPQueryThrottleOption.Override;
ContentIterator迭代器=新ContentIterator();
ProcessListItems(列表、spquery、ProcessListItem、ProcessListItemError);
在每种情况下,我都使用了
SPCollectionItem
或迭代器。当我在
spquery
中传递where条件时。同样的错误也会出现。

您必须

  • 。。。将
    行限制设置为低于查询中配置的阈值
  • 。。。或者定义一个返回较少项的查询
  • 。。。或者在名单上
您是否看到过:

hmmz,刚刚尝试了这个,但仍然出现了一个错误。但是,如果我使用此方法,我可以迭代超过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,只需更改查询即可

    //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) 
//将查询保留在标记内。
字符串query=“ab”
SPQuery SPQuery=新建SPQuery();
spquery.Query=Query;
ContentIterator迭代器=新ContentIterator();
ProcessListItems(列表、spquery、ProcessListItem、ProcessListItemError)

现在运行该程序,它就会工作。

可能是因为您要比较的字段没有索引:

如果您要构建一个返回前100个排序项的查询 通过ID字段,查询将无问题执行,因为ID 列始终被索引。但是,如果要构建一个查询 返回按非索引标题字段排序的前100个项目 查询必须在中扫描内容数据库中的所有10000行 order可在返回第一个文件之前按标题确定排序顺序 100件。因此,查询将被限制,并且是正确的 因此,这是一项资源密集型操作


为了有效地使用ContentIterator并避免节流异常,您应该显式地包含OrderBy子句

尝试使用ContentIterator.ItemEnumerationOrderByNVPField,它实际上启用了要使用的索引

有关更多详细信息,请查看此


已定义感谢行限制,该查询如何abc它也给出了相同的错误,因为返回结果的数量是一个。您可以将设置为
覆盖
。这会改变什么吗?更新的代码字符串query2=@“11759”;SPQuery SPQuery=新建SPQuery();spquery.RowLimit=10;spquery.Query=query2;spquery.QueryThrottleMode=SPQueryThrottleOption.Override;ContentIterator迭代器=新ContentIterator();ProcessListItems(列表、spquery、ProcessListItem、ProcessListItemError);在每种情况下,我都使用SPCollectionItem或迭代器。当我在spquery中传递where条件时。同样的错误也会出现。如果你尝试在查询中使用一些“where子句”,它会再次给出throttle error,那么我无法帮助你,因为我尝试了它,它在这里运行正常-但是现在SPQuery没有应用。