Добрый день, подскажите, как можно написать подобный запрос на esq? Желательно на стороне сервера. Смотрел в сторону addAggregationSchemaColumn, но там можно либо посчитать количество, либо применить min, max и т.п, а эти функции работают только с числовыми полями.
select
(select top 1 Number from ContactCommunication where ContactId = c.Id and CommunicationTypeId = 'EE1C85C3-CFCB-DF11-9B2A-001D60E938C6')
from Contact c
Нравится
Запрос в скобках:
var esq = new EntitySchemaQuery(userConn.EntitySchemaManager, "ContactCommunication"); esq.AddColumn("Number"); esq.RowCount = 1; esq.Filters.Add(esq.CreateFilterWithParameters( FilterComparisonType.Equal, "ContactId ", contactId)); esq.Filters.Add(esq.CreateFilterWithParameters( FilterComparisonType.Equal, "CommunicationTypeId", "EE1C85C3-CFCB-DF11-9B2A-001D60E938C6")); var collection = esq.GetEntityCollection(userConn);
Запрос в скобках:
var esq = new EntitySchemaQuery(userConn.EntitySchemaManager, "ContactCommunication"); esq.AddColumn("Number"); esq.RowCount = 1; esq.Filters.Add(esq.CreateFilterWithParameters( FilterComparisonType.Equal, "ContactId ", contactId)); esq.Filters.Add(esq.CreateFilterWithParameters( FilterComparisonType.Equal, "CommunicationTypeId", "EE1C85C3-CFCB-DF11-9B2A-001D60E938C6")); var collection = esq.GetEntityCollection(userConn);
Литвинко Павел, спасибо! Попробую. Только не разбираясь в деталях, увидел проблему, что в таком случае в выборку не по попадут контакты с незаполненным полем, потому запрос не подойдет.
В идеале нужно получить поля из Контакта и поле из средств связи (в том числе пустое)
Павел, такой результат из таблицы средств связи получить не получится, ведь там нет записей о контактах без средств связи.
В Вашем случае нужно будет действовать наоборот, выбирать из таблицы Contact с добавлением колонок из таблицы детали средств связи, таких как [ContactCommunication:Contact:Id].CommunicationType и [ContactCommunication:Contact:Id].Number, по таким же колонкам можно и накладывать фильтр.