TcfOss.Filtering
Filtering, sorting, paging, and CSV/XLSX export libraries for .NET and TypeScript.
Define requests with shared contracts, validate client field names with a mapper,
and apply requests to IQueryable<T> queries.
Choose a Package
| Need | Package |
|---|---|
| Wire-format DTOs and constants | TcfOss.Filtering.Contracts |
| Filtering, sorting, paging, and field selection | TcfOss.Filtering.Linq |
| EF Core async queries and EF-aware parsing | TcfOss.Filtering.EntityFrameworkCore |
| CSV export | TcfOss.Filtering.CsvOutput |
| Excel export | TcfOss.Filtering.XlsxOutput |
| Newtonsoft.Json filter deserialization | TcfOss.Filtering.Contracts.Newtonsoft |
| ASP.NET Core malformed-filter handling | TcfOss.Filtering.AspNetCore |
| Strongly typed filters constructed in C# | TcfOss.Filtering.Programmatic |
| Frontend contracts and optional Zod schemas | @tcfoss/filtering-contracts |
Getting Started
Install the contracts and query packages for a .NET application:
dotnet add package TcfOss.Filtering.Contracts
dotnet add package TcfOss.Filtering.Linq
Construct a request with contract constants:
using TcfOss.Filtering.Contracts;
var request = new DataRequest
{
Filter = new SimpleFilter("Name", FilterOperators.Contains, "smith"),
Sorts = [new SortComponent("Name", SortDirections.Ascending)],
Page = 1,
PageSize = 20,
};
Before applying a client request to a query, use a mapper to validate field paths and parse values. See request mapping, including field whitelists and blacklists, and the LINQ usage examples.
For a TypeScript frontend:
npm install @tcfoss/filtering-contracts
import { FilterOperators, SortDirections } from '@tcfoss/filtering-contracts';
import type { DataRequest } from '@tcfoss/filtering-contracts';
const request: DataRequest = {
filter: {
filterType: 'simple',
field: 'Name',
operator: FilterOperators.Contains,
value: 'smith',
},
sorts: [{ field: 'Name', direction: SortDirections.Ascending }],
page: 1,
pageSize: 20,
};
How It Fits Together
Frontend -> API -> Contracts DTOs -> Mapper -> LINQ filters -> IQueryable -> DataResult
The contracts define the wire format; LINQ applies validated requests to queries. Optional packages add EF Core integration, export writers, middleware, and JSON converters.
Guides and References
- Contract keys and wire values
- Transforming, searching, extracting, and merging filters
- Request mapping and field access control
- Exporting filtered data
- Framework and serializer integrations
- AI coding skill and reference material
- Contributing and development
- Documentation maintenance
- Release workflow
Source and Contributions
Browse the repository and runnable demo. Report bugs and feature requests on IssueTracker. Contribution guidance is in the repository README. The project is licensed under the MIT License.