DynamicWhere.ex
DynamicWhere.exv2.1.0·docs

Connector

Connector is the logical operator that joins the children of a ConditionGroup. It applies to both flat Conditions and nested SubConditionGroups within the same group.

Values

ValueDescriptionC# equivalentSQL equivalent
AndAll children must evaluate to true.&&AND
OrAt least one child must evaluate to true.||OR

JSON example — And

An And group where both predicates must hold.

{
  "connector": "And",
  "conditions": [
    {
      "sort": 1,
      "field": "Name",
      "dataType": "Text",
      "operator": "IContains",
      "values": ["john"]
    },
    {
      "sort": 2,
      "field": "Age",
      "dataType": "Number",
      "operator": "GreaterThanOrEqual",
      "values": [18]
    }
  ],
  "subConditionGroups": []
}

Generated SQL (illustrative):

WHERE LOWER(Name) LIKE '%john%' AND Age >= 18

JSON example — Or

An Or group — either predicate is enough.

{
  "connector": "Or",
  "conditions": [
    {
      "sort": 1,
      "field": "Role",
      "dataType": "Text",
      "operator": "Equal",
      "values": ["Admin"]
    },
    {
      "sort": 2,
      "field": "Role",
      "dataType": "Text",
      "operator": "Equal",
      "values": ["Manager"]
    }
  ],
  "subConditionGroups": []
}

Generated SQL (illustrative):

WHERE Role = 'Admin' OR Role = 'Manager'

Mixing connectors via nesting

A single ConditionGroup has exactly one Connector. To express compound logic like A AND (B OR C), put the Or branch in a SubConditionGroup.

{
  "connector": "And",
  "conditions": [
    {
      "sort": 1,
      "field": "IsActive",
      "dataType": "Boolean",
      "operator": "Equal",
      "values": [true]
    }
  ],
  "subConditionGroups": [
    {
      "sort": 1,
      "connector": "Or",
      "conditions": [
        { "sort": 1, "field": "Role", "dataType": "Text", "operator": "Equal", "values": ["Admin"] },
        { "sort": 2, "field": "Role", "dataType": "Text", "operator": "Equal", "values": ["Manager"] }
      ],
      "subConditionGroups": []
    }
  ]
}

Equivalent SQL:

WHERE IsActive = 1 AND (Role = 'Admin' OR Role = 'Manager')
Note
Sub-groups can nest to unlimited depth. The library validates that Sort values are unique within each level of conditions and sub-groups.

C# usage

using DynamicWhere.ex.Enums;

var group = new ConditionGroup
{
    Connector = Connector.And,
    Conditions = new List<Condition>
    {
        new Condition { Sort = 1, Field = "IsActive", DataType = DataType.Boolean, Operator = Operator.Equal, Values = new List<object> { true } }
    }
};