Подфильтр в фильтре ESQ
11 июля 2019 18:02
Может кто-нибудь подскажет как на стороне C# , построить фильтр такого типа
SELECT t.* FROM "ScParticipEransaction" t
WHERE t."ScFApplicationId" = '{37D4FA0D-C359-4FA3-A1AC-0264335DC7FE}' AND t."ScAccountId" IS not NULL
AND NOT EXISTS (SELECT * FROM "ScActivityType" aa WHERE t."ScAccountId" = aa."ScAccountId" AND aa."ScTypeId" = '{65DA2BBA-9A74-47D4-8205-86EA39FF27A8}') Т.е. здесть основное как в запросе NOT EXISTS добавить условие "ScTypeId" = '{65DA2BBA-9A74-47D4-8205-86EA39FF27A8}', с помощью EntitySchemaQuery на C#.
вот фильр но как дальше, как добавить условие в подзапрос не понятно.
esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "ScFApplication", applicationId));
esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.IsNotNull, "ScAccount"));
esq.Filters.Add(esq.CreateExistsFilter("[ScActivityType:ScAccount:ScAccount]"));
esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Exists, "[ScActivityType:ScAccount:ScAccount]"));
Нравится
2 комментария
Лучший ответ
13 июля 2019 13:35
Добрый день используйте класс Select - https://academy.terrasoft.ru/api/netcoreapi/7.11.0/index.html#Terrasoft.Core~Terrasoft.Core.DB.Select_members.html
13 июля 2019 13:35
Добрый день используйте класс Select - https://academy.terrasoft.ru/api/netcoreapi/7.11.0/index.html#Terrasoft.Core~Terrasoft.Core.DB.Select_members.html
15 июля 2019 10:47
Пример работы с NOT EXISTS для класса Select:
var selectContact = new Select(UserConnection)
.Distinct()
.Column(OpenProfileLookupName + "Id")
.From(OpenProfileLookupName + "Profile")
.Where("ProfileId").In(Column.Parameters(objectProfileId))
.And().Not().Exists(new Select(UserConnection)
.Column("Id")
.From("CampaignTarget")
.Where("CampaignTarget", OpenProfileLookupName + "Id")
.IsEqual(OpenProfileLookupName + "Profile", OpenProfileLookupName + "Id")
.And("CampaignTarget", "CampaignId").IsEqual(new QueryParameter(selectedCampaignId)) as Select)
as Select;
using (var dbExecutor = UserConnection.EnsureDBConnection()) {
using(var dr = selectContact.ExecuteReader(dbExecutor)) {
while (dr.Read()) {
Guid contactId = (Guid)dr.GetValue(0);
var schema = schemaManager.GetInstanceByName("CampaignTarget");
//...
}
}
}
Показать все комментарии
Войдите или зарегистрируйтесь, что бы комментировать