11using System . Collections ;
22using System . Linq . Expressions ;
33using JsonApiDotNetCore . Queries ;
4- using JsonApiDotNetCore . Queries . Internal . QueryableBuilding ;
4+ using JsonApiDotNetCore . Queries . QueryableBuilding ;
55using JsonApiDotNetCore . Resources ;
66using Microsoft . EntityFrameworkCore . Metadata ;
77
88namespace NoEntityFrameworkExample ;
99
1010internal sealed class QueryLayerToLinqConverter
1111{
12- private readonly IResourceFactory _resourceFactory ;
1312 private readonly IModel _model ;
13+ private readonly IQueryableBuilder _queryableBuilder ;
1414
15- public QueryLayerToLinqConverter ( IResourceFactory resourceFactory , IModel model )
15+ public QueryLayerToLinqConverter ( IModel model , IQueryableBuilder queryableBuilder )
1616 {
17- _resourceFactory = resourceFactory ;
1817 _model = model ;
18+ _queryableBuilder = queryableBuilder ;
1919 }
2020
2121 public IEnumerable < TResource > ApplyQueryLayer < TResource > ( QueryLayer queryLayer , IEnumerable < TResource > resources )
@@ -26,10 +26,9 @@ public IEnumerable<TResource> ApplyQueryLayer<TResource>(QueryLayer queryLayer,
2626 converter . ConvertIncludesToSelections ( ) ;
2727
2828 // Convert QueryLayer into LINQ expression.
29- Expression source = ( ( IEnumerable ) resources ) . AsQueryable ( ) . Expression ;
30- var nameFactory = new LambdaParameterNameFactory ( ) ;
31- var queryableBuilder = new QueryableBuilder ( source , queryLayer . ResourceType . ClrType , typeof ( Enumerable ) , nameFactory , _resourceFactory , _model ) ;
32- Expression expression = queryableBuilder . ApplyQuery ( queryLayer ) ;
29+ IQueryable source = ( ( IEnumerable ) resources ) . AsQueryable ( ) ;
30+ var context = QueryableBuilderContext . CreateRoot ( source , typeof ( Enumerable ) , _model , null ) ;
31+ Expression expression = _queryableBuilder . ApplyQuery ( queryLayer , context ) ;
3332
3433 // Insert null checks to prevent a NullReferenceException during execution of expressions such as:
3534 // 'todoItems => todoItems.Where(todoItem => todoItem.Assignee.Id == 1)' when a TodoItem doesn't have an assignee.
0 commit comments