https://github.com/anton-grebenkin/queryfilter
a library that provides to apply serialized filters to IQueryable collections
https://github.com/anton-grebenkin/queryfilter
dotnet dotnet-core expressions filtering iqueryable library query-builder
Last synced: 20 days ago
JSON representation
a library that provides to apply serialized filters to IQueryable collections
- Host: GitHub
- URL: https://github.com/anton-grebenkin/queryfilter
- Owner: Anton-Grebenkin
- License: mit
- Created: 2023-07-26T10:08:42.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2024-07-15T11:23:38.000Z (almost 2 years ago)
- Last Synced: 2025-08-29T04:40:15.300Z (10 months ago)
- Topics: dotnet, dotnet-core, expressions, filtering, iqueryable, library, query-builder
- Language: C#
- Homepage:
- Size: 273 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# QueryFilter
A library that provides to apply serialized filters to IQueryable collections
## Features
- Filtering
- Paging
- Sorting
## Usage
Creating single filter with sorting and paging
```csharp
var filter = new Filter
{
MainNode = new FilterNode
{
ExpressionOperator = ExpressionOperatorType.GreaterThan,
PropertyName = nameof(Item.Id),
Value = 1
},
Sorts = new List()
{
new PropertySort
{
Desc = true,
PropertyName = nameof(Item.Id)
}
},
Skip = 10,
Take = 100
};
```
Creating multiple filters with a logical operator "or". It is possible to create many filters with nesting and logical operators "and" and "or"
```csharp
var filter = new Filter
{
MainNode = new FilterNode
{
LogicalOperator = LogicalOperatorType.Or,
FilterNodes = new List
{
new FilterNode
{
ExpressionOperator = ExpressionOperatorType.GreaterThan,
PropertyName = nameof(Item.Id),
Value = 1
},
new FilterNode
{
ExpressionOperator = ExpressionOperatorType.LessThan,
PropertyName = nameof(Item.Id),
Value = 100
}
}
},
Sorts = new List()
{
new PropertySort
{
Desc = true,
PropertyName = nameof(Item.Id)
}
},
Skip = 10,
Take = 100
};
```
Apply filter
```csharp
public ActionResult> GetItems([FromBody] Filter filter)
{
var items = db.Items.ApplyFilter(filter).ToList();
return Ok(items);
}
```