11using AutoQuery . Abstractions ;
22using AutoQuery . Extensions ;
33using BenchmarkDotNet . Attributes ;
4+ using Microsoft . Extensions . Options ;
5+ using Sieve . Models ;
6+ using Sieve . Services ;
47using System . Linq . Dynamic . Core ;
58using System . Reflection ;
69
@@ -11,23 +14,37 @@ public class QueryPerformance
1114{
1215 private List < TestData > _autoQueryTestData = null ! ;
1316 private List < TestData > _dynamicLinqTestData = null ! ;
17+ private List < TestData > _sieveTestData = null ! ;
1418 private QueryProcessor _queryProcessor = null ! ;
19+ private SieveProcessor _sieveProcessor = null ! ;
1520
1621 [ GlobalSetup ]
1722 public void Setup ( )
1823 {
1924 _queryProcessor = new QueryProcessor ( ) ;
2025 _queryProcessor . ApplyConfigurationsFromAssembly ( Assembly . GetExecutingAssembly ( ) ) ;
2126 _autoQueryTestData = Enumerable . Range ( 1 , 10000 )
22- . Select ( i => new TestData { Id = i , Name = $ "Name{ i } ", Age = i % 100 } )
23- . ToList ( ) ;
27+ . Select ( i => new TestData { Id = i , Name = $ "Name{ i } ", Age = i % 100 } )
28+ . ToList ( ) ;
2429 _dynamicLinqTestData = Enumerable . Range ( 1 , 10000 )
25- . Select ( i => new TestData { Id = i , Name = $ "Name{ i } ", Age = i % 100 } )
26- . ToList ( ) ;
30+ . Select ( i => new TestData { Id = i , Name = $ "Name{ i } ", Age = i % 100 } )
31+ . ToList ( ) ;
32+ _sieveTestData = Enumerable . Range ( 1 , 10000 )
33+ . Select ( i => new TestData { Id = i , Name = $ "Name{ i } ", Age = i % 100 } )
34+ . ToList ( ) ;
35+
36+ var sieveOptions = Options . Create ( new SieveOptions
37+ {
38+ DefaultPageSize = 10 ,
39+ MaxPageSize = 100 ,
40+ CaseSensitive = false
41+ } ) ;
42+
43+ _sieveProcessor = new SieveProcessor ( sieveOptions ) ;
2744 }
2845
2946 [ Benchmark ]
30- public void FilterSortSelectPageWithAutoQuery ( )
47+ public void AutoQuery_FilterSortSelectPage ( )
3148 {
3249 var queryOptions = new TestQueryOptions
3350 {
@@ -38,11 +55,11 @@ public void FilterSortSelectPageWithAutoQuery()
3855 PageSize = 10
3956 } ;
4057
41- _autoQueryTestData . AsQueryable ( ) . ApplyQueryPaged ( _queryProcessor , queryOptions ) ;
58+ _autoQueryTestData . AsQueryable ( ) . ApplyQueryPaged ( _queryProcessor , queryOptions ) . Datas . ToList ( ) ;
4259 }
4360
4461 [ Benchmark ]
45- public void FilterSortSelectPageWithDynamicLinq ( )
62+ public void DynamicLinq_FilterSortSelectPageWith ( )
4663 {
4764 _dynamicLinqTestData . AsQueryable ( )
4865 . Where ( "Name == @0" , "Name5000" )
@@ -53,6 +70,45 @@ public void FilterSortSelectPageWithDynamicLinq()
5370 . ToDynamicList ( ) ;
5471 }
5572
73+ [ Benchmark ]
74+ public void AutoQuery_FilterSortPageWith ( )
75+ {
76+ var queryOptions = new TestQueryOptions
77+ {
78+ Name = "Name5000" ,
79+ Sort = "Age" ,
80+ Page = 1 ,
81+ PageSize = 10
82+ } ;
83+
84+ _autoQueryTestData . AsQueryable ( ) . ApplyQueryPaged ( _queryProcessor , queryOptions ) . Datas . ToList ( ) ;
85+ }
86+
87+ [ Benchmark ]
88+ public void DynamicLinq_FilterSortPageWith ( )
89+ {
90+ _dynamicLinqTestData . AsQueryable ( )
91+ . Where ( "Name == @0" , "Name5000" )
92+ . OrderBy ( "Age" )
93+ . Skip ( 0 )
94+ . Take ( 10 )
95+ . ToDynamicList ( ) ;
96+ }
97+
98+ [ Benchmark ]
99+ public void Sieve_FilterSortPageWith ( )
100+ {
101+ var sieveModel = new SieveModel
102+ {
103+ Filters = "Name==Name5000" ,
104+ Sorts = "Age" ,
105+ Page = 1 ,
106+ PageSize = 10 ,
107+ } ;
108+
109+ _sieveProcessor . Apply ( sieveModel , _sieveTestData . AsQueryable ( ) ) . ToList ( ) ;
110+ }
111+
56112 public class UserQueryConfiguration : IFilterQueryConfiguration < TestQueryOptions , TestData >
57113 {
58114 public void Configure ( FilterQueryBuilder < TestQueryOptions , TestData > builder )
0 commit comments