У объекта SPQuery существует область выполнения. Она может быть одной из:
Member name
|
Description
|
Default
|
Показать только файлы и вложенные папки указанной папки.
|
Recursive
|
Показать все файлы во всех папках.
|
RecursiveAll
|
Показать все файлы и все вложенные папки всех папок
|
FilesOnly
|
Показать только файлы из определенной папки.
|
Для примера, я буду сравнивать результаты запросов с разной областью. В листе есть папки и подпапки. Всего элементов должно быть 561:
string siteUrl = @"http://xxxxxxx”";
using (SPSite site = new SPSite(siteUrl))
using (SPWeb web = site.OpenWeb())
{
SPList list = web.Lists["Project Documents"];
Console.WriteLine("List: " + list.Title);
Console.WriteLine("ReallyCount: " + list.ItemCount);
SPQuery spQry = new SPQuery();
spQry.RowLimit = 300;
do
{
SPListItemCollection items = list.GetItems(spQry);
Console.WriteLine("FirstQuery: " + items.Count);
spQry.ListItemCollectionPosition = items.ListItemCollectionPosition;
} while (spQry.ListItemCollectionPosition != null);
spQry = new SPQuery();
spQry.ViewAttributes = "Scope=\"RecursiveAll\"";
spQry.RowLimit = 300;
do
{
SPListItemCollection items = list.GetItems(spQry);
Console.WriteLine("SecondQuery: " + items.Count);
spQry.ListItemCollectionPosition = items.ListItemCollectionPosition;
} while (spQry.ListItemCollectionPosition != null);
}
Console.Read();
Результат:
Как вы можете увидеть list.ItemCount
показывает что элементов в листе всего 8. Но установив наиболее часто употребляемое значение области
RecursiveAll я получил 561 элемент в 2 захода.
Комментариев нет:
Отправить комментарий