Example 9: Segment — Set Operations
A Segment combines multiple ConditionSet sources via UNION / INTERSECT / EXCEPT, then applies select, order, and page to the result. Run it through ToListAsync<T>(Segment).
Request
{
"conditionSets": [
{
"sort": 1,
"intersection": null,
"conditionGroup": {
"connector": "And",
"conditions": [
{
"sort": 1,
"field": "Category.Name",
"dataType": "Text",
"operator": "Equal",
"values": ["Electronics"]
}
],
"subConditionGroups": []
}
},
{
"sort": 2,
"intersection": "Union",
"conditionGroup": {
"connector": "And",
"conditions": [
{
"sort": 1,
"field": "Price",
"dataType": "Number",
"operator": "LessThan",
"values": ["20"]
}
],
"subConditionGroups": []
}
},
{
"sort": 3,
"intersection": "Except",
"conditionGroup": {
"connector": "And",
"conditions": [
{
"sort": 1,
"field": "IsActive",
"dataType": "Boolean",
"operator": "Equal",
"values": ["false"]
}
],
"subConditionGroups": []
}
}
],
"selects": ["Id", "Name", "Price"],
"orders": [
{ "sort": 1, "field": "Name", "direction": "Ascending" }
],
"page": {
"pageNumber": 1,
"pageSize": 20
}
}Note
Logic:
(Electronics) UNION (Price < 20) EXCEPT (Inactive) → order → paginate.Response shape (SegmentResult<Product>)
{
"pageNumber": 1,
"pageSize": 20,
"pageCount": 2,
"totalCount": 35,
"data": [
{ "id": 1, "name": "Adapter Cable", "price": 9.99 }
],
"queryString": null
}