Вопрос

Подфильтр в фильтре ESQ

Может кто-нибудь подскажет как на стороне 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 комментария
Лучший ответ

Пример работы с 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");
    //...
   }
  }
 }

 

Показать все комментарии