@@ -27,6 +27,8 @@ public override ResultTable ExecuteQuery(QueryRequest request)
2727
2828 var result = query . TryPaginate ( request . Pagination , request . SystemTime ) ;
2929
30+ result = result . SelectManySubQueries ( ) ;
31+
3032 if ( inMemoryOrders != null )
3133 {
3234 result = result . OrderBy ( inMemoryOrders ) ;
@@ -44,7 +46,9 @@ public override async Task<ResultTable> ExecuteQueryAsync(QueryRequest request,
4446
4547 var result = await query . TryPaginateAsync ( request . Pagination , request . SystemTime , token ) ;
4648
47- if ( inMemoryOrders != null )
49+ result = result . SelectManySubQueries ( ) ;
50+
51+ if ( inMemoryOrders != null )
4852 {
4953 result = result . OrderBy ( inMemoryOrders ) ;
5054 }
@@ -92,29 +96,48 @@ private DQueryable<T> GetDQueryable(QueryRequest request, out List<Order>? inMem
9296 if ( ! request . Columns . Where ( c => c is _EntityColumn ) . Any ( ) )
9397 request . Columns . Insert ( 0 , new _EntityColumn ( EntityColumnFactory ( ) . BuildColumnDescription ( ) , QueryName ) ) ;
9498
95- var query = Query
96- . ToDQueryable ( GetQueryDescription ( ) )
97- . SelectMany ( request . Multiplications ( ) )
98- . Where ( request . Filters ) ;
99-
100- if ( request . Pagination is Pagination . All )
99+ if ( request . MultiplicationsInSubQueries ( ) )
101100 {
102- var allColumns = request . Columns . Select ( a => a . Token )
103- . Concat ( request . Orders . Select ( a => a . Token ) )
104- . Distinct ( )
105- . Select ( t => new Column ( t , null ) ) . ToList ( ) ;
101+ var columnAndOrderTokens = request . Columns . Select ( a => a . Token )
102+ . Concat ( request . Orders . Select ( a => a . Token ) )
103+ . Distinct ( )
104+ . ToHashSet ( ) ;
106105
107- inMemoryOrders = request . Orders . ToList ( ) ;
106+ inMemoryOrders = request . Orders ;
107+
108+ var query = Query
109+ . ToDQueryable ( GetQueryDescription ( ) )
110+ . Where ( request . Filters )
111+ . SelectWithSubQueries ( columnAndOrderTokens ) ;
108112
109- return query . Select ( allColumns ) ;
113+ return query ;
110114 }
111115 else
112116 {
113- inMemoryOrders = null ;
117+ var query = Query
118+ . ToDQueryable ( GetQueryDescription ( ) )
119+ . SelectMany ( request . Multiplications ( ) )
120+ . Where ( request . Filters ) ;
121+
122+ if ( request . Pagination is Pagination . All )
123+ {
124+ var allColumns = request . Columns . Select ( a => a . Token )
125+ . Concat ( request . Orders . Select ( a => a . Token ) )
126+ . Distinct ( )
127+ . Select ( t => new Column ( t , null ) ) . ToList ( ) ;
128+
129+ inMemoryOrders = request . Orders . ToList ( ) ;
114130
115- return query
116- . OrderBy ( request . Orders )
117- . Select ( request . Columns ) ;
131+ return query . Select ( allColumns ) ;
132+ }
133+ else
134+ {
135+ inMemoryOrders = null ;
136+
137+ return query
138+ . OrderBy ( request . Orders )
139+ . Select ( request . Columns ) ;
140+ }
118141 }
119142 }
120143
0 commit comments