FlexQuery.NET
4.0.0-preview.3
dotnet add package FlexQuery.NET --version 4.0.0-preview.3
NuGet\Install-Package FlexQuery.NET -Version 4.0.0-preview.3
<PackageReference Include="FlexQuery.NET" Version="4.0.0-preview.3" />
<PackageVersion Include="FlexQuery.NET" Version="4.0.0-preview.3" />
<PackageReference Include="FlexQuery.NET" />
paket add FlexQuery.NET --version 4.0.0-preview.3
#r "nuget: FlexQuery.NET, 4.0.0-preview.3"
#:package FlexQuery.NET@4.0.0-preview.3
#addin nuget:?package=FlexQuery.NET&version=4.0.0-preview.3&prerelease
#tool nuget:?package=FlexQuery.NET&version=4.0.0-preview.3&prerelease
FlexQuery.NET
Dynamic filtering, sorting, paging, and projection for IQueryable in .NET.
FlexQuery.NET is the core package. It provides the query parsing engine, expression builders, validation pipeline, and all core models.
When to Use This Package
Install this package if you want to parse, validate, and compose dynamic queries independently of any specific data provider. Use this package directly when building custom integrations or when implementing your own query execution pipeline.
Installation
dotnet add package FlexQuery.NET
Quick Start
using FlexQuery.NET;
var parameters = new FlexQueryParameters
{
Filter = "status:eq:active",
Sort = "createdAt:desc",
Page = 1,
PageSize = 20
};
var options = parameters.ToQueryOptions();
var query = _context.Users.Apply(options);
// Execute using your preferred provider
Features
- Query Parsing — Auto-detects DSL, JSON, and Indexed query formats via
QueryOptionsParser.Parse() - Filtering — 20+ operators (eq, contains, gt, between, in, etc.), nested AND/OR logic
- Sorting — Multi-field sorting with direction and aggregate sort support
- Paging — 1-based page indexing with configurable page size limits
- Security — Declare allowed/blocked fields per-endpoint via
BaseQueryOptions - Validation — Built-in field path, operator, and type validation with
ValidateOrThrow<T>() - Diagnostics — Optional
IFlexQueryExecutionListenerfor observability - Query Parsing Cache — Thread-safe parser cache for low-latency repeated queries
Supported Query Formats
All formats are auto-detected — no configuration needed.
DSL
GET /api/users?filter=age:gte:18&sort=name:asc
JSON
GET /api/users?filter={"logic":"and","filters":[{"field":"age","operator":"gte","value":18}]}
Indexed
GET /api/users?filter[0].field=age&filter[0].operator=gte&filter[0].value=18
Related Packages
- FlexQuery.NET.EntityFrameworkCore — Async execution for EF Core
- FlexQuery.NET.Dapper — SQL generation for Dapper
- FlexQuery.NET.AspNetCore — ASP.NET Core
[FieldAccess]security - FlexQuery.NET.Diagnostics — Execution diagnostics
- FlexQuery.NET.Adapters.AgGrid — AG Grid SSRM adapter
- FlexQuery.NET.Adapters.Kendo — Kendo UI adapter
- FlexQuery.NET.Parsers.Jql — JQL parser
- FlexQuery.NET.Parsers.MiniOData — OData-compatible parser
Full Documentation:
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.Extensions.Primitives (>= 10.0.0)
-
net6.0
- Microsoft.Extensions.Primitives (>= 6.0.0)
-
net8.0
- Microsoft.Extensions.Primitives (>= 8.0.0)
NuGet packages (11)
Showing the top 5 NuGet packages that depend on FlexQuery.NET:
| Package | Downloads |
|---|---|
|
FlexQuery.NET.AspNetCore
ASP.NET Core integration for FlexQuery.NET — declarative field-access security via [FieldAccess] attributes and action filters |
|
|
FlexQuery.NET.EFCore
EF Core integration for FlexQuery.NET — async execution, filtered includes, projection, and pagination helpers |
|
|
FlexQuery.NET.EntityFrameworkCore
EF Core integration for FlexQuery.NET — async execution, filtered includes, projection, and pagination helpers |
|
|
FlexQuery.NET.Dapper
Dapper integration for FlexQuery.NET — async execution, filtered includes, projection, and pagination helpers |
|
|
FlexQuery.NET.Adapters.Kendo
Kendo UI DataSource filter and sorting payload adapter for FlexQuery.NET — translates Kendo UI DataSource filter and sort parameters into canonical FlexQuery.NET query models. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 4.0.0-preview.3 | 72 | 7/18/2026 |
| 4.0.0-preview.2 | 82 | 7/14/2026 |
| 4.0.0-preview.1 | 85 | 7/12/2026 |
| 3.1.1 | 298 | 7/4/2026 |
| 3.1.0 | 325 | 6/26/2026 |
| 3.0.6 | 293 | 6/24/2026 |
| 3.0.5 | 304 | 6/24/2026 |
| 3.0.4 | 289 | 6/23/2026 |
| 3.0.3 | 283 | 6/23/2026 |
| 3.0.2 | 299 | 6/22/2026 |
| 3.0.1 | 290 | 6/22/2026 |
| 2.5.0 | 361 | 5/13/2026 |
| 2.4.0 | 156 | 5/10/2026 |
| 2.3.1 | 172 | 5/8/2026 |
| 2.3.0 | 161 | 5/7/2026 |
| 2.2.0 | 159 | 5/6/2026 |
| 2.1.0 | 149 | 5/6/2026 |
| 2.0.1 | 155 | 5/6/2026 |
| 1.7.2 | 160 | 5/4/2026 |
- docs: update OpenAPI documentation registry and schema docs
- test: update tests for HAVING expression tree, parsers, validators, and SQL generation
- docs: update OpenAPI documentation, adapters, and sample diagnostics
- fix: update validation rules and request model for aggregate refactor
- refactor: update fluent builders and extensions for new Aggregate model
- feat: update HAVING expression builder and SQL generation for nested conditions
- refactor: replace AggregateModel with Aggregate and update aggregate parsers
- feat: add HAVING validation rules and update validator pipeline
- feat: add recursive-descent HAVING parsers for DSL and FQL with AND/OR/parentheses
- refactor: introduce HAVING expression tree models and AST nodes
- refactor(groupby): extract GroupByParser from FQL-specific parser
- test(parser-dsl): add identifier grammar tests for select and aggregate
- test(parser-fql): add identifier grammar tests for select and aggregate
- refactor(parser-dsl): enforce single identifier grammar in select and aggregate
- refactor(parser-fql): enforce single identifier grammar in select and aggregate
- refactor(parser): unify identifier grammar in ParserUtilities
- test: update SelectTests for SelectNode canonical AST
- refactor: minor cleanup in FqlAggregateParser
- refactor: cleanup shared validation helpers
- refactor: update validation and builder layers for SelectNode AST
- refactor: make SelectNode the canonical parser AST for nested projections
- feat: introduce SelectValidationRule for SELECT projection semantics
- refactor: rename projection SelectModel to SelectNode
- test(remaining): update validation, caching, security, dapper, and builder tests
- test(projection): update projection and integration tests for SelectModel
- test(parsers): update parser tests to assert SelectModel objects
- feat(source): wire remaining builders and extensions to SelectModel
- refactor(projection): update downstream consumers to use SelectModel
- feat(parsers): update all select parsers to emit List<SelectModel>
- feat(projection): introduce SelectModel AST and update QueryOptions.Select type
- tests: add end-to-end having validation tests to parser test suites
- tests: update Dapper having integration test to DSL syntax
- tests: update HAVING validation tests for aggregate declaration checks
- tests: update DSL having parser tests for new grammar
- validation: enforce declared aggregate references in HAVING
- parsers: centralize DSL aggregate grammar in AggregateGrammar
- Tests: add parser-level validation tests for DSL and FQL
- ExpressionBuilder: use FilterOperators for operator support check
- DSL: document AST contract and use FilterOperators for grammar validation
- FQL: complete HAVING operator set and remove redundant converter validation
- feat(parser): reject unsupported operators in DSL Having parser
- Revert "test(integration): update sort syntax in mixed aggregate sort test"
- test: add comprehensive aggregate parser tests and reorganize sort parser tests
- refactor(models): rename SortOption to SortNode
- test(integration): update sort syntax in mixed aggregate sort test
- test(validation): add COUNT target validation tests for aggregate sort
- test(parser): update DSL sort parser tests for new aggregate syntax
- feat(validation): enforce COUNT targets collection-only in sort
- feat(parser): add descriptive comments to aggregate sort parser
- refactor(parser): replace legacy aggregate sort syntax with colon-separated format
- refactor(validation): remove AggregateAliasValidationRule
- test(aggregate-sort): update tests for wildcard rejection and normalized AST
- refactor(builders): update aggregate and sort builders for enum-based AST
- feat(validation): add aggregate validation rules and error codes
- feat(parsers): reject wildcard aggregates and normalize aggregate sort AST
- refactor: rename SortParser to DslSortParser
- test(projection): add alias integration tests
- test(fql): add nested alias parser tests
- test(dsl): add nested alias parser tests
- feat(builder): propagate aliases and detect conflicts in MergeTree
- feat(fql): add nested alias parsing to FqlSelectParser
- feat(dsl): add nested alias parsing to DslSelectParser
- test(di): fix namespace to match folder structure
- test(projection): add nested projection integration tests
- test(fql): add nested projection parser tests
- test(dsl): add nested projection parser tests
- fix(governance): skip ValidateOrThrow in non-strict mode
- feat(fql): add ParseToSelectionTree for nested projection support
- feat(dsl): add ParseToSelectionTree for nested projection support
- test: add aggregate alias validation and builder tests
- test: add DSL and FQL parser aggregate alias tests
- feat: update AggregateBuilder fluent API for optional aliases
- feat: enforce non-empty alias syntax in FQL aggregate parser
- feat: enforce non-empty alias syntax in DSL aggregate parser
- feat: add aggregate alias semantic validation
- fix(tests): align Dapper integration and FQL parser tests with colon alias syntax
- feat(select): add DSL colon alias parsing to DslSelectParser
- refactor(parser): rename HavingParser to DslHavingParser
- refactor: restrict include to navigation property paths only
- merge: shared model migration and test modernization (#11)
- test: finalize DialectTests migration to shared model registry
- test: update remaining test files for shared model compatibility
- test: update integration, projection, security, and validation tests
- test: update Dapper integration and security tests for shared model
- test: update Dapper SQL translation tests for shared model
- test: update builders, caching, filters, and resolver expectations
- test: add new test infrastructure for shared model
- refactor: remove old per-test fixtures and legacy FlexQueryCore tests
- feat: add cycle detection and shared model metadata
- merge feature/regression test to main branch (#10)
- feat(dsl): adopt function-first aggregate grammar
- refactor(parsers): split shared SelectParser by language
- refactor: unify parser exceptions under FlexQueryException
- test(dapper): add SqlJoinBuilder unit tests
- test(dapper): add SqlCountBuilder, SqlHavingBuilder, SqlSelectBuilder unit tests
- refactor(tests): split ValidationRuleTests into one file per rule
- refactor(tests): reorganize test files into structured feature folders
- test: add comprehensive unit test suites for Core, AspNetCore, OpenApi, and Diagnostics
- refactor(core): make global config immutable after first call; add thread-safe registries and tests