Коллеги, приветствую.
Есть некоторый запрос, который возвращает дату платежа и дату последней активности по платежу:
ContactId AS debtorId,
t1.CreatedOn AS activityDate,
t2.CreatedOn AS paymentDate
FROM Activity AS t1 INNER JOIN UsrPayments AS t2
ON t1.ContactId = t2.UsrDebtorId
WHERE t1.CreatedOn = (
SELECT max(CreatedOn) FROM Activity
WHERE t1.ContactId = t2.UsrDebtorId
);
И есть некоторый код C#, где с помощью подзапроса я хочу определить дату последней активности по платежу, аналогично тому, как я это делаю выше на native SQL:
.Column("t1", "ContactId")
.Column("t1", "CreatedOn")
.Column("t2", "CreatedOn")
.From("Activity").As("t1")
.Join(JoinType.Inner, "UsrPayments").As("t2")
.On("t1", "ContactId").IsEqual("t2", "UsrDebtorId")
.Where("... здесь подзапрос и обращение к функции max() ...")
as Select;
Как этот подзапрос написать?
Был бы весьма признателен за информацию.
Спасибо.
--
С уважением, Алексей Быков.
Нравится
Здравствуйте!
Все функции описаны по ссылке.
Пример:
SELECT C.Name, (SELECT COUNT(*) FROM Activity A WHERE A.ContactId = C.Id) As ActivityCount FROM Contact C
Перевод в С#:
var subSelect = new Select(userConnection) .Column(Func.Count(Column.Asterisk())) .From("Activity").As("A") .Where("C", "Id").IsEqual("A", "ContactId").As("ActivityCount") var select = new Select(userConnection) .Column("C", "Name") .Column(subSelect) .From("Contact").As("C")
Здравствуйте, Олег!
Примеры доступны по ссылке:
https://www.terrasoft.ru/bpmonlinesdk/UsingEntitySchemaQuery.html
"Шамшин_Олег" написал:А можно то же самое, только не Select'ом а с помощью ESQ?
1. Делаете один esq запрос на содержимое подзапроса, выбираете из него, список Id, или чего вам нужно, в оригинальном посте подзапрос выбирал CreatedOn. Формируете массив этих CreatedOn.
2. В колбеке после возврата результата подзапроса, формируете новый esq запрос, с фильтрацией нужной колонки, в оригинальном посте CreatedOn на вхождение в массив ранее выбранных CreatedOn.
Т.к. фильтрация createColumnInFilterWithParameters спокойно проверит вхождение колонки и в массив.
Пример оторванный от контекста esq, рассматривает только создания фильтра, но такой фильтр подставленный в esq будет работать и в esq:
http://www.community.terrasoft.ru/forum/topic/11497#comment-50859