четверг, 5 сентября 2013 г.

SPQuery scope

У объекта SPQuery существует область выполнения. Она может быть одной из:
Member name
Description
Default
Показать только файлы и вложенные папки указанной папки.
Recursive
Показать все файлы во всех папках.
RecursiveAll
Показать все файлы и все вложенные папки всех папок
FilesOnly
Показать только файлы из определенной папки.


Для примера, я буду сравнивать результаты запросов с разной областью. В листе есть папки и подпапки. Всего элементов должно быть 561:

string siteUrl = @"http://xxxxxxx&#8221";
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 захода. 

Комментариев нет:

Отправить комментарий