Добавление колонок в запрос. Метод AddColumn()
Glossary Item Box
Общие сведения
Колонка запроса EntitySchemaQuery — экземпляр класса EntitySchemaQueryColumn.
В свойствах экземпляра колонки можно указать ее основные характеристики: заголовок, значение для отображения, различные признаки ее использования, порядок и позицию сортировки и т.д.
Метод AddColumn() класса Terrasoft.Core.Entities.EntitySchemaQuery — возвращает экземпляр добавленной в запрос колонки.
Имя колонки относительно корневой схемы в методах AddColumn() формируется согласно правилам, описанным в статье "Корневая схема. Построение путей к колонкам".
Табл. 1. — Список перегрузок метода AddColumn()
Перегрузка | Параметры | Описание |
---|---|---|
AddColumn(string columnPath) |
columnPath — путь к колонке схемы относительно корневой схемы. |
Создает и добавляет колонку в запрос к схеме объекта по заданному пути к колонке относительно корневой схемы (см. пример 1). |
AddColumn(string columnPath, AggregationTypeStrict aggregationType, out EntitySchemaQuery subQuery) |
columnPath — путь к колонке схемы относительно корневой схемы. aggregationType — тип агрегирующей функции. В качестве параметра передаются значения перечисления типов агрегирующей функции Terrasoft.Common.AggregationTypeStrict. subQuery — ссылка на созданный подзапрос, помещенный в колонку. |
Создает и добавляет колонку в запрос к схеме объекта в виде подзапроса, возвращающего результат указанной агрегирующей функции, по пути к колонке схемы относительно корневой схемы (см. пример 2). |
AddColumn(EntitySchemaQueryColumn queryColumn) | queryColumn — экземпляр EntitySchemaQueryColumn, добавляемый в коллекцию колонок текущего запроса. | Добавляет переданную колонку в коллекцию колонок запроса к схеме объекта (см. пример 3). |
AddColumn(EntitySchemaQueryFunction function) | function — экземпляр функции EntitySchemaQueryFunction. | Создает и добавляет колонку в запрос к схеме объекта по переданной функции (см. пример 4). |
AddColumn(object parameterValue, DataValueType parameterDataValueType) | parameterValue — значение параметра. parameterDataValueType тип значения параметра. | Создает и добавляет в запрос к схеме объекта колонку типа "параметр" с заданным значением определенного типа (см. пример 5). |
AddColumn(EntitySchemaQuery subQuery) | subQuery – экземпляр EntitySchemaQuery, который добавляется в качестве колонки к текущему запросу. | Создает и добавляет в качестве колонки запроса к схеме объекта переданный экземпляр подзапроса EntitySchemaQuery (см. пример 6). |
Примеры добавления колонок в запрос.
Пример 1
Добавление колонки в запрос по заданному пути относительно корневой схемы.
EntitySchemaManager esqManager = UserConnection.EntitySchemaManager; var esqResult = new EntitySchemaQuery(esqManager, "City"); // Добавление колонки "Name" в результирующий запрос. esqResult.AddColumn("Name");
Пример 2
Добавление колонки в виде подзапроса, возвращающего результат агрегирующей функции COUNT.
// Получение экземпляра менеджера схем объектов. EntitySchemaManager esqManager = UserConnection.EntitySchemaManager; // Создание экземпляра EntitySchemaQuery с корневой схемой "City". var esqResult = new EntitySchemaQuery(esqManager, "City"); // Экземпляр EntitySchemaQuery, в который будет помещен подзапрос, возвращающий результат агрегирующей функции. EntitySchemaQuery subResultEsq; // Добавление колонки в виде подзапроса, возвращающего количество городов в разрезе стран, хранящихся в // таблице "Country". esqResult.AddColumn("[City:Country].Name", AggregationTypeStrict.Count, out subResultEsq); // Получение текста результирующего запроса созданного экземпляра EntitySchemaQuery. string sqlText = esqResult.GetSelectQuery(UserConnection).GetSqlText(); // Текст результирующего sql-запроса: // MS SQL: // SELECT // (SELECT // COUNT([SubCity].[Id]) [Count] // FROM // [dbo].[City] [SubCity] // WHERE // [SubCity].[CountryId] = [Country].[Id]) [SubCity] // FROM // [dbo].[Country] [Country]
Пример 3
Добавление в запрос экземпляра класса EntitySchemaQueryColumn.
EntitySchemaManager esqManager = UserConnection.EntitySchemaManager; var esqResult = new EntitySchemaQuery(esqManager, "City"); // Создание экземпляра колонки "Name" схемы. var esqColumn = new EntitySchemaQueryColumn("Name"); // Добавление созданной колонки в EntitySchemaQuery. esqResult.AddColumn(esqColumn);
Пример 4
Добавление в качестве колонки функции ISNULL. Функция возвращает значение колонки [MobilePhone] корневой схемы запроса либо значение колонки [Phone] в случае, если значение колонки [MobilePhone] является null.
EntitySchemaManager esqManager = UserConnection.EntitySchemaManager; var esqResult = new EntitySchemaQuery(esqManager, "Contact"); esqResult.AddColumn("Name"); // Создание экземпляра функции IsNull. var esqFunction = esqResult.CreateIsNullFunction("MobilePhone", "Phone"); // Добавление созданной функции в виде колонки в результирующий запрос. esqResult.AddColumn(esqFunction); string esqSqlText = esqResult.GetSelectQuery(UserConnection).GetSqlText(); // Текст результирующего sql-запроса: // MS SQL: // SELECT // [Contact].[Name] [Name], // ISNULL([Contact].[MobilePhone], [Contact].[Phone]) [IsNull] // FROM // [dbo].[Contact] [Contact]
Пример 5
Добавление колонки-параметра со значением, равным идентификатору текущего пользователя.
EntitySchemaManager esqManager = UserConnection.EntitySchemaManager; var esqResult = new EntitySchemaQuery(esqManager, "Contact"); // Получение экземпляра менеджера типов данных. DataValueTypeManager dvtManager = UserConnection.DataValueTypeManager; // Добавление колонки-параметра со значением, равным идентификатору текущего пользователя, передав при этом // в качестве типа данных значения параметра экземпляр типа <Guid>. esqResult.AddColumn(UserConnection.CurrentUser.ContactId, dvtManager.GetInstanceByName("Guid"));
Пример 6
Добавление в качестве колонки экземпляра подзапроса EntitySchemaQuery.
EntitySchemaManager esqManager = UserConnection.EntitySchemaManager; // Создание экземпляра EntitySchemaQuery с корневой схемой "Contact". var esqSubQuery = new EntitySchemaQuery(esqManager, "Contact"); esqSubQuery.AddColumn("Id"); esqSubQuery.AddColumn("Name"); // Создание нового запроса с корневой схемой "Account". var esqResult = new EntitySchemaQuery(esqManager, "Account"); esqResult.AddColumn("Name"); // Добавление в качестве колонки запроса подзапрос esqSubQuery. esqResult.AddColumn(esqSubQuery); string esqSqlText = esqResult.GetSelectQuery(UserConnection).GetSqlText(); // Текст результирующего sql-запроса: // MS SQL: // SELECT // [Account].[Name] [Name], // ( // SELECT // [Contact].[Name] [Name] // FROM // [dbo].[Contact] [Contact]) [SubContact] // FROM // [dbo].[Account] [Account]