Наложение ограничения, сортировка, диапазон индексов загружаемых объектов
Полный список примеров кода Flexberry ORM находится в статье “Примеры кода”.
Пример наложения ограничения на загружаемые объекты данных (условия, количество и т.д.)
Обычно приложения не ограничиваются простой загрузкой объектов из БД: требуется сортировка, наложение условий на загружаемые объекты, на их индексы.
Для хранения и передачи сервису данных всей этой информации используется структура данных ICSSoft.STORMNET.Business.LoadingCustomizationStruct
.
В примере показано ее использование при загрузке объектов данных: наложение ограничения, сортировка, диапазон индексов загружаемых объектов.
Console.WriteLine("3. How to load a set of dataobjects in specific view, limitation, quantity, etc..");
// Во Flexberry ORM есть разные наборы операций (языки) для задание ограничений. Самый простой - SQLWhereLanguageDef.
ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef ld =
ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.LanguageDef;
// Создаем структуру, хранящую параметры загрузки объектов (представление, типы данных, ограничение и т.д.).
LoadingCustomizationStruct lcs = new LoadingCustomizationStruct(null);
lcs.View = CD.Views.CD_E;
lcs.LoadingTypes = new[] { typeof(CDDA), typeof(CDDD), typeof(DVD) };
// Ограничение, использующие свойства классов, на которые ссылается класс CS. Могут быть использованы те свойства,
// которые указаны в представлении, по которому производится загрузка объектов.
lcs.LimitFunction = ld.GetFunction(ld.funcEQ,
new VariableDef(ld.StringType, Information.ExtractPropertyPath<CD>(c => c.Publisher.Country.Name)), "USA");
// Параметры сортировки загружаемых объектов. Указать можно также только свойства, которые есть в представлении.
lcs.ColumnsSort = new[] { new ColumnsSortDef(Information.ExtractPropertyName<CD>(c => c.Name), ICSSoft.STORMNET.Business.SortOrder.Asc) };
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
// Можно указать диапазон индексов загружаемых объектов, что удобно, например, для постраничного вывода.
// lcs.RowNumber = new RowNumberDef(2, 5);
// Есть три основных метода для загрузки объектов:
// 1. Загрузить из БД записи и для каждой из них создать экземпляр объекта данных.
ICSSoft.STORMNET.DataObject[] objs = DataServiceProvider.DataService.LoadObjects(lcs);
// 2. Загрузить без создания экземпляров (каждый объект представлен в виде строки из значений свойств с разделителями).
// Используется, когда не требуется редактирование объектов. Он намного быстрее!
ObjectStringDataView[] stringedview = DataServiceProvider.DataService.LoadStringedObjectView(';', lcs);
// 3. Получить количество объектов, без загрузки данных.
int iObjsCount = DataServiceProvider.DataService.GetObjectsCount(lcs);
stopwatch.Stop();
Console.WriteLine("Time taken for all loadings: {0} ms.", stopwatch.ElapsedMilliseconds);