Filter | [interface](../blob/master/PoweredSoft.DynamicQuery.Core/IFilter.cs) | [default implemetation](../blob/master/PoweredSoft.DynamicQuery.Filter.cs) | [test](../blob/master/PoweredSoft.DynamicQuery.Test/TBT.md) | Represent a filter to be executed
Sort | [interface](../blob/master/PoweredSoft.DynamicQuery.Core/ISort.cs) | [default implemetation](../blob/master/PoweredSoft.DynamicQuery.Sort.cs) | [test](../blob/master/PoweredSoft.DynamicQuery.Test/TBT.md) | Represent a sort to be executed
Group | [interface](../blob/master/PoweredSoft.DynamicQuery.Core/IGroup.cs) | [default implemetation](../blob/master/PoweredSoft.DynamicQuery.Group.cs) | [test](../blob/master/PoweredSoft.DynamicQuery.Test/TBT.md) | Represent a group to be executed
Aggregate | [interface](../blob/master/PoweredSoft.DynamicQuery.Core/IAggregate.cs) | [default implemetation](../blob/master/PoweredSoft.DynamicQuery.Aggregate.cs) | [test](../blob/master/PoweredSoft.DynamicQuery.Test/TBT.md) | Represent an aggregate to be executed
### Sample
```csharp
var criteria = new QueryCriteria
{
Page = 1,
PageSize = 12,
Filters = new List<IFilter>
{
new SimpleFilter { Path = "FirstName", Type = FilterType.Equal, Value = "John" }
}
};
var queryHandler = new QueryHandler();
IQueryExecutionResult result = queryHandler.Execute(someQueryable, criteria);
```
## Query Result
Here is the interfaces that represent the result of query handling execution.
```csharp
public interface IAggregateResult
{
string Path { get; set; }
AggregateType Type { get; set; }
object Value { get; set; }
}
public interface IQueryResult
{
List<IAggregateResult> Aggregates { get; }
List<object> Data { get; }
}
public interface IGroupQueryResult : IQueryResult
{
string GroupPath { get; set; }
object GroupValue { get; set; }
}
public interface IQueryExecutionResult : IQueryResult
{
long TotalRecords { get; set; }
long? NumberOfPages { get; set; }
}
```
## Interceptors
Interceptors are meant to add hooks at certain part of the query handling to allow alteration of the criterias or the queryable it self.\
The following is documented in the order of what they are called by the **default** query handler implementation.
IIncludeStrategyInterceptor | [interface](../blob/master/PoweredSoft.DynamicQuery.Core/IIncludeStrategyInterceptor.cs) | [test](../blob/master/PoweredSoft.DynamicQuery.Test/TBT.md) | This is to allow you to specify include paths for the queryable
IIncludeStrategyInterceptor<T> | [interface](../blob/master/PoweredSoft.DynamicQuery.Core/IIncludeStrategyInterceptor.cs) | [test](../blob/master/PoweredSoft.DynamicQuery.Test/TBT.md) | This is to allow you to specify include paths for the queryable
IBeforeQueryFilterInterceptor | [interface](../blob/master/PoweredSoft.DynamicQuery.Core/IBeforeQueryFilterInterceptor.cs) | [test](../blob/master/PoweredSoft.DynamicQuery.Test/TBT.md) | Before adding the filters to the expression
IBeforeQueryFilterInterceptor<T> | [interface](../blob/master/PoweredSoft.DynamicQuery.Core/IBeforeQueryFilterInterceptor.cs) | [test](../blob/master/PoweredSoft.DynamicQuery.Test/TBT.md) | Before adding the filters to the expression
INoSortInterceptor | [interface](../blob/master/PoweredSoft.DynamicQuery.Core/INoSortInterceptor.cs) | [test](../blob/master/PoweredSoft.DynamicQuery.Test/TBT.md) | This is called to allow you to specify an OrderBy in case none is specified, to avoid paging crash with EF6
INoSortInterceptor<T> | [interface](../blob/master/PoweredSoft.DynamicQuery.Core/INoSortInterceptor.cs) | [test](../blob/master/PoweredSoft.DynamicQuery.Test/TBT.md) | This is called to allow you to specify an OrderBy in case none is specified, to avoid paging crash with EF6
> After/During expression building before query execution
IFilterInterceptor | [interface](../blob/master/PoweredSoft.DynamicQuery.Core/IFilterInterceptor.cs) | [test](../blob/master/PoweredSoft.DynamicQuery.Test/TBT.md) | This interceptor allows you to change the behavior of a IFilter being applied to the queryable
ISortInterceptor | [interface](../blob/master/PoweredSoft.DynamicQuery.Core/ISortInterceptor.cs) | [test](../blob/master/PoweredSoft.DynamicQuery.Test/TBT.md) | This interceptor allows you to change the behavior of a ISort being applied to the queryable
IGroupInterceptor | [interface](../blob/master/PoweredSoft.DynamicQuery.Core/IGroupInterceptor.cs) | [test](../blob/master/PoweredSoft.DynamicQuery.Test/TBT.md) | This interceptor allows you to change the behavior of a IGroup being applied to the queryable
IAggregateInterceptor | [interface](../blob/master/PoweredSoft.DynamicQuery.Core/IAggregateInterceptor.cs) | [test](../blob/master/PoweredSoft.DynamicQuery.Test/TBT.md) | This interceptor allows you to change the behavior of a IAggregate being applied to the queryable
IQueryConvertInterceptor | [interface](../blob/master/PoweredSoft.DynamicQuery.Core/IQueryConvertInterceptor.cs) | [test](../blob/master/PoweredSoft.DynamicQuery.Test/TBT.md) | This interceptor allows you to replace the object that is being returned by the query, by another object instance
IQueryConvertInterceptor<T> | [interface](../blob/master/PoweredSoft.DynamicQuery.Core/IQueryConvertInterceptor.cs) | [test](../blob/master/PoweredSoft.DynamicQuery.Test/TBT.md) | This interceptor allows you to replace the object that is being returned by the query, by another object instance