在我想要查询的列表中,有大约10000+行(Listitems)。
我想迭代timerJob中的每一项-但我不能一次使用所有的项,因为:对象模型覆盖-不,ListView阈值- 1000 -在场级别,我不能改变这一点。
迭代所有10000+ (像批处理一样)的方法是什么?
发布于 2011-04-29 03:33:46
您应该使用ContentIterator。这将允许您在不触发SPQueryThrottledException的情况下遍历非常大的列表的内容。
例如:
SPList list = SPContext.Current.Web.Lists["MyList"];
// Build query using an iterator-defined WHERE clause
string query = string.Format("<Where><Eq><FieldRef Name='MyFieldName'/><Value Type='Text'>MyFieldValue</Value></Eq></Where>{0}", ContentIterator.ItemEnumerationOrderByNVPField);
// Instantiate iterator and use it to process the list
ContentIterator iterator = new ContentIterator();
iterator.ProcessListItems(list, query, ProcessListItem, ProcessListItemError);然后你可以这样定义你的ProcessListItem和ProcessListItemError:
static void ProcessListItem(SPListItem item) {
Console.WriteLine("ProcessListItem: Name {0}", item.Title);
}
static bool ProcessListItemError(SPListItem item, Exception e) {
Console.WriteLine("ERROR: message {0}", e.Message);
return true;
}我还建议您查看微软的Best Practices with SharePoint Server articles,特别是"Writing Efficient Code In SharePoint Server",它进一步讨论了如何正确编写查询。
https://stackoverflow.com/questions/5823267
复制相似问题