Помогите, пожалуйста, написать условие Where для запроса, используя класс Select().
Запрос (обратите внимание на комментарии в тексте запроса):
SELECT
        a.Id AS AccountId, a.Name AS AccountName, a.Code AS AccountCode, a.CreatedOn AS AccountCreatedOn
        , a.CompanyActivity
        , a.OwnerId, o.Name AS OwnerName
        , o.OrganizationChartId AS BranchId, b.CustomDepartmentName AS BranchName
FROM Account a
        LEFT JOIN Contact o ON o.Id = a.OwnerId
                LEFT JOIN AccountOrganizationChart b ON b.Id = o.OrganizationChartId
WHERE
        (
        EXISTS (SELECT ac.Id FROM Activity ac WHERE ac.AccountId = a.Id)
        OR EXISTS (SELECT cam.Id FROM Campaign cam INNER JOIN CampaignTarget ct ON ct.CampaignId = cam.Id WHERE ct.AccountId = a.Id)
        OR EXISTS (SELECT d.Id FROM Document d WHERE d.AccountId = a.Id AND d.TypeId = '{EAAEF18E-6E19-41B3-B808-473A78016220}')
        )
        /* УСЛОВИЯ in МОГУТ ОТСУТСТВОВАТЬ (В ЗАВИСИМОСТИ ОТ ВЫБОРА ПОЛЬЗОВАТЕЛЯ) */
        AND o.OrganizationChartId IN ('что-то')
        AND a.OwnerId IN ('что-то')
ORDER BY a.Name
 
 
пока что удалось сделать следующее:
Terrasoft.Core.DB.Select mainQuery = new Terrasoft.Core.DB
    .Select(userConnection)
        .Column("a", "Id").As("AccountId").Column("a", "Name").As("AccountName")
        .Column("a", "Code").As("AccountCode").Column("a", "CreatedOn").As("AccountCreatedOn")
        .Column("a", "CompanyActivity").As("CompanyActivity")
        .Column("a", "OwnerId")
        .Column(new QueryColumnExpression() { ExpressionType = QueryColumnExpressionType.SqlText, SqlText = "isnull([o].[Name],'не указан>')" }).As("OwnerName")
        .Column("o", "OrganizationChartId").As("BranchId")
        .Column(new QueryColumnExpression() { ExpressionType = QueryColumnExpressionType.SqlText, SqlText = "isnull([b].[CustomDepartmentName],'не указан>')" }).As("BranchName")
    .From("Account").As("a")
        .LeftOuterJoin("Contact").As("o").On("o", "Id").IsEqual("a", "OwnerId")
            .LeftOuterJoin("AccountOrganizationChart").As("b").On("b", "Id").IsEqual("o", "OrganizationChartId")
    .Where()
        .Exists(
            new Terrasoft.Core.DB.Select(userConnection).Column("ac","Id").From("Activity").As("ac").Where("ac","AccountId").IsEqual("a","Id")
        ).Or()
        .Exists(
            cQuery /*Terrasoft.Core.DB.Select подзапрос, формируется отдельно по условию*/
        ).Or()
        .Exists(
            new Terrasoft.Core.DB.Select(userConnection).Column("d", "Id").From("Document").As("d").Where("d", "AccountId").IsEqual("a", "Id")
            .And("d", "TypeId").IsEqual(new QueryColumnExpression() { ExpressionType = QueryColumnExpressionType.SqlText, SqlText = "'EAAEF18E-6E19-41B3-B808-473A78016220'" })
        )
    .OrderByAsc("a", "Name")
    as Select;
 
 
Не получается поместить все три exists в блок, чтобы потом добавить условия in.
И еще вопрос: можно ли как-то динамически формировать блок условий (т.к. они у меня зависят от настроек пользователя), а потом "подсовывать" его select'у ?
Версия 7.1.0.172