Вы должны использовать 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;
}
Я бы также порекомендовал вам ознакомиться со статьями Microsoft *1014* Best Practices с SharePoint Server , в частности " Написание эффективного кода в SharePoint Server ",который далее обсуждает правильное написание запросов.