Sharepoint 如何在sharepoit 2010中使用内容迭代器
我的清单上有7000项。我需要过滤列表并检索结果 我正在我的Web部件中使用以下代码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
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条件时。同样的错误也会出现。您必须
- 。。。将
行限制设置为低于查询中配置的阈值
- 。。。或者定义一个返回较少项的查询
- 。。。或者在名单上
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没有应用。