From 43ada8bc45679870be33a3bc55d574651e59058e Mon Sep 17 00:00:00 2001 From: Sam Xu Date: Thu, 9 Dec 2021 13:31:06 -0800 Subject: [PATCH] remove GetNestedxxxBinder from QueryBinderContext --- .../Microsoft.AspNetCore.OData.xml | 36 ++++++++++------- .../PublicAPI.Unshipped.txt | 8 ++-- .../Query/Expressions/QueryBinder.cs | 35 +++++++++-------- .../Query/Expressions/QueryBinderContext.cs | 17 -------- .../Query/Expressions/SelectExpandBinder.cs | 39 ++++++++++++++++--- .../Query/ODataQueryContextExtensions.cs | 2 +- .../Query/Query/ApplyQueryOptions.cs | 5 +-- .../Query/Query/FilterQueryOption.cs | 5 +-- .../Query/Query/OrderByQueryOption.cs | 5 +-- .../Query/Query/SelectExpandQueryOption.cs | 4 -- ...rosoft.AspNetCore.OData.PublicApi.Net5.bsl | 7 ++-- ...t.AspNetCore.OData.PublicApi.NetCore31.bsl | 7 ++-- .../Expressions/BinderExtensionsTests.cs | 1 - .../Query/Expressions/FilterBinderTests.cs | 1 - .../Expressions/FilterBinderTestsHelper.cs | 1 - .../Query/Expressions/OrderByBinderTests.cs | 1 - .../Expressions/SelectExpandBinderTest.cs | 6 +-- 17 files changed, 91 insertions(+), 89 deletions(-) diff --git a/src/Microsoft.AspNetCore.OData/Microsoft.AspNetCore.OData.xml b/src/Microsoft.AspNetCore.OData/Microsoft.AspNetCore.OData.xml index 0c2dbfce8..2d2db69af 100644 --- a/src/Microsoft.AspNetCore.OData/Microsoft.AspNetCore.OData.xml +++ b/src/Microsoft.AspNetCore.OData/Microsoft.AspNetCore.OData.xml @@ -9134,19 +9134,6 @@ Gets or sets the assembly resolver. - - - Gets or sets the nested filter binder. - For example: we do a orderby and a nested $filter. - $orderby=Addresses/$count($filter=HouseNumber gt 8) or - $filter=collectionProp/$count($filter=Name eq 'abc') gt 2 - - - - - Gets or sets the nested orderby binder. - - Flattened list of properties from base query, for case when binder is applied for aggregated query. @@ -9187,6 +9174,29 @@ an . + + + Initializes a new instance of the class. + Select and Expand binder depends on and to process inner $filter and $orderby. + + The injected filter binder. + The injected orderby binder. + + + + For unit test only. + + + + + Gets the filter binder. + + + + + Gets the orderby binder. + + Translate an OData $select or $expand tree represented by to an . diff --git a/src/Microsoft.AspNetCore.OData/PublicAPI.Unshipped.txt b/src/Microsoft.AspNetCore.OData/PublicAPI.Unshipped.txt index d833b044d..e881e74cb 100644 --- a/src/Microsoft.AspNetCore.OData/PublicAPI.Unshipped.txt +++ b/src/Microsoft.AspNetCore.OData/PublicAPI.Unshipped.txt @@ -881,10 +881,6 @@ Microsoft.AspNetCore.OData.Query.Expressions.QueryBinderContext.ComputedProperti Microsoft.AspNetCore.OData.Query.Expressions.QueryBinderContext.CurrentParameter.get -> System.Linq.Expressions.ParameterExpression Microsoft.AspNetCore.OData.Query.Expressions.QueryBinderContext.ElementClrType.get -> System.Type Microsoft.AspNetCore.OData.Query.Expressions.QueryBinderContext.ElementType.get -> Microsoft.OData.Edm.IEdmType -Microsoft.AspNetCore.OData.Query.Expressions.QueryBinderContext.GetNestedFilterBinder.get -> System.Func -Microsoft.AspNetCore.OData.Query.Expressions.QueryBinderContext.GetNestedFilterBinder.set -> void -Microsoft.AspNetCore.OData.Query.Expressions.QueryBinderContext.GetNestedOrderByBinder.get -> System.Func -Microsoft.AspNetCore.OData.Query.Expressions.QueryBinderContext.GetNestedOrderByBinder.set -> void Microsoft.AspNetCore.OData.Query.Expressions.QueryBinderContext.GetParameter(string name) -> System.Linq.Expressions.ParameterExpression Microsoft.AspNetCore.OData.Query.Expressions.QueryBinderContext.Model.get -> Microsoft.OData.Edm.IEdmModel Microsoft.AspNetCore.OData.Query.Expressions.QueryBinderContext.NavigationSource.get -> Microsoft.OData.Edm.IEdmNavigationSource @@ -894,7 +890,9 @@ Microsoft.AspNetCore.OData.Query.Expressions.QueryBinderContext.QueryBinderConte Microsoft.AspNetCore.OData.Query.Expressions.QueryBinderContext.QuerySettings.get -> Microsoft.AspNetCore.OData.Query.ODataQuerySettings Microsoft.AspNetCore.OData.Query.Expressions.QueryBinderContext.RemoveParameter(string name) -> void Microsoft.AspNetCore.OData.Query.Expressions.SelectExpandBinder -Microsoft.AspNetCore.OData.Query.Expressions.SelectExpandBinder.SelectExpandBinder() -> void +Microsoft.AspNetCore.OData.Query.Expressions.SelectExpandBinder.FilterBinder.get -> Microsoft.AspNetCore.OData.Query.Expressions.IFilterBinder +Microsoft.AspNetCore.OData.Query.Expressions.SelectExpandBinder.OrderByBinder.get -> Microsoft.AspNetCore.OData.Query.Expressions.IOrderByBinder +Microsoft.AspNetCore.OData.Query.Expressions.SelectExpandBinder.SelectExpandBinder(Microsoft.AspNetCore.OData.Query.Expressions.IFilterBinder filterBinder, Microsoft.AspNetCore.OData.Query.Expressions.IOrderByBinder orderByBinder) -> void Microsoft.AspNetCore.OData.Query.FilterQueryOption Microsoft.AspNetCore.OData.Query.FilterQueryOption.ApplyTo(System.Linq.IQueryable query, Microsoft.AspNetCore.OData.Query.ODataQuerySettings querySettings) -> System.Linq.IQueryable Microsoft.AspNetCore.OData.Query.FilterQueryOption.Context.get -> Microsoft.AspNetCore.OData.Query.ODataQueryContext diff --git a/src/Microsoft.AspNetCore.OData/Query/Expressions/QueryBinder.cs b/src/Microsoft.AspNetCore.OData/Query/Expressions/QueryBinder.cs index f79850828..ddbca3818 100644 --- a/src/Microsoft.AspNetCore.OData/Query/Expressions/QueryBinder.cs +++ b/src/Microsoft.AspNetCore.OData/Query/Expressions/QueryBinder.cs @@ -509,32 +509,33 @@ public virtual Expression BindCountNode(CountNode node, QueryBinderContext conte countMethod = ExpressionHelperMethods.EnumerableCountGeneric.MakeGenericMethod(elementType); } - MethodInfo whereMethod; - if (typeof(IQueryable).IsAssignableFrom(source.Type)) - { - whereMethod = ExpressionHelperMethods.QueryableWhereGeneric.MakeGenericMethod(elementType); - } - else - { - whereMethod = ExpressionHelperMethods.EnumerableWhereGeneric.MakeGenericMethod(elementType); - } - // Bind the inner $filter clause within the $count segment. // e.g Books?$filter=Authors/$count($filter=Id gt 1) gt 1 - Expression filterExpression; if (node.FilterClause != null) { - // TODO: double check, sam xu - //QueryBinderContext subContext = context.CreateSubContext(); - //subContext.ElementClrType = elementType; - IFilterBinder nestedFilterBinder = context.GetNestedFilterBinder(); QueryBinderContext nextBinderContext = new QueryBinderContext(context, context.QuerySettings, elementType); - filterExpression = nestedFilterBinder.BindFilter(node.FilterClause, nextBinderContext); + Expression body = Bind(node.FilterClause.Expression, nextBinderContext); + + ParameterExpression filterParameter = nextBinderContext.CurrentParameter; + + LambdaExpression filterExpr = Expression.Lambda(body, filterParameter); + + filterExpr = Expression.Lambda(ApplyNullPropagationForFilterBody(filterExpr.Body, nextBinderContext), filterExpr.Parameters); + + MethodInfo whereMethod; + if (typeof(IQueryable).IsAssignableFrom(source.Type)) + { + whereMethod = ExpressionHelperMethods.QueryableWhereGeneric.MakeGenericMethod(elementType); + } + else + { + whereMethod = ExpressionHelperMethods.EnumerableWhereGeneric.MakeGenericMethod(elementType); + } // The source expression looks like: $it.Authors // So the generated countExpression below will look like: $it.Authors.Where($it => $it.Id > 1) - source = Expression.Call(null, whereMethod, new[] { source, filterExpression }); + source = Expression.Call(null, whereMethod, new[] { source, filterExpr }); } // append LongCount() method. diff --git a/src/Microsoft.AspNetCore.OData/Query/Expressions/QueryBinderContext.cs b/src/Microsoft.AspNetCore.OData/Query/Expressions/QueryBinderContext.cs index 54f9791a6..ee531bd71 100644 --- a/src/Microsoft.AspNetCore.OData/Query/Expressions/QueryBinderContext.cs +++ b/src/Microsoft.AspNetCore.OData/Query/Expressions/QueryBinderContext.cs @@ -8,7 +8,6 @@ using System; using System.Collections.Generic; using System.Diagnostics.Contracts; -using System.Linq; using System.Linq.Expressions; using Microsoft.AspNetCore.OData.Edm; using Microsoft.OData; @@ -110,9 +109,6 @@ public QueryBinderContext(QueryBinderContext context, ODataQuerySettings querySe ParameterExpression thisParameters = Expression.Parameter(clrType, DollarIt); _lambdaParameters[DollarThis] = thisParameters; - GetNestedFilterBinder = context.GetNestedFilterBinder; - GetNestedOrderByBinder = context.GetNestedOrderByBinder; - IsNested = true; } @@ -136,19 +132,6 @@ public QueryBinderContext(QueryBinderContext context, ODataQuerySettings querySe /// public IAssemblyResolver AssembliesResolver { get; set; } - /// - /// Gets or sets the nested filter binder. - /// For example: we do a orderby and a nested $filter. - /// $orderby=Addresses/$count($filter=HouseNumber gt 8) or - /// $filter=collectionProp/$count($filter=Name eq 'abc') gt 2 - /// - public Func GetNestedFilterBinder { get; set; } - - /// - /// Gets or sets the nested orderby binder. - /// - public Func GetNestedOrderByBinder { get; set; } - /// /// Flattened list of properties from base query, for case when binder is applied for aggregated query. /// Or the properties from $compute query options. diff --git a/src/Microsoft.AspNetCore.OData/Query/Expressions/SelectExpandBinder.cs b/src/Microsoft.AspNetCore.OData/Query/Expressions/SelectExpandBinder.cs index 9c205fbfd..555ddd0f5 100644 --- a/src/Microsoft.AspNetCore.OData/Query/Expressions/SelectExpandBinder.cs +++ b/src/Microsoft.AspNetCore.OData/Query/Expressions/SelectExpandBinder.cs @@ -29,6 +29,35 @@ namespace Microsoft.AspNetCore.OData.Query.Expressions /// public class SelectExpandBinder : ISelectExpandBinder { + /// + /// Initializes a new instance of the class. + /// Select and Expand binder depends on and to process inner $filter and $orderby. + /// + /// The injected filter binder. + /// The injected orderby binder. + public SelectExpandBinder(IFilterBinder filterBinder, IOrderByBinder orderByBinder) + { + FilterBinder = filterBinder ?? throw Error.ArgumentNull(nameof(filterBinder)); + OrderByBinder = orderByBinder ?? throw Error.ArgumentNull(nameof(orderByBinder)); + } + + /// + /// For unit test only. + /// + internal SelectExpandBinder() + : this(new FilterBinder(), new OrderByBinder()) + { } + + /// + /// Gets the filter binder. + /// + public IFilterBinder FilterBinder { get; } + + /// + /// Gets the orderby binder. + /// + public IOrderByBinder OrderByBinder { get; } + /// /// Translate an OData $select or $expand tree represented by to an . /// @@ -217,7 +246,6 @@ public virtual Expression CreatePropertyValueExpression(QueryBinderContext conte newSettings.CopyFrom(context.QuerySettings); newSettings.HandleNullPropagation = HandleNullPropagationOption.True; QueryBinderContext binderContext = new QueryBinderContext(context, newSettings, clrElementType); - IFilterBinder filterBinder = binderContext.GetNestedFilterBinder(); if (isCollection) { @@ -225,13 +253,13 @@ public virtual Expression CreatePropertyValueExpression(QueryBinderContext conte // TODO: Implement proper support for $select/$expand after $apply // Expression filterPredicate = FilterBinder.Bind(null, filterClause, clrElementType, queryContext, querySettings); - filterResult = filterBinder.ApplyBind(filterSource, filterClause, binderContext); + filterResult = FilterBinder.ApplyBind(filterSource, filterClause, binderContext); nullablePropertyType = filterResult.Type; } else if (settings.HandleReferenceNavigationPropertyExpandFilter) { - LambdaExpression filterLambdaExpression = filterBinder.BindFilter(filterClause, binderContext) as LambdaExpression; + LambdaExpression filterLambdaExpression = FilterBinder.BindFilter(filterClause, binderContext) as LambdaExpression; if (filterLambdaExpression == null) { throw new ODataException(Error.Format(SRResources.ExpandFilterExpressionNotLambdaExpression, edmProperty.Name, "LambdaExpression")); @@ -943,7 +971,7 @@ private static SelectExpandClause GetOrCreateSelectExpandClause(IEdmNavigationPr return new SelectExpandClause(selectItems, false); } - private static Expression AddOrderByQueryForSource(QueryBinderContext context, Expression source, OrderByClause orderbyClause, Type elementType) + private Expression AddOrderByQueryForSource(QueryBinderContext context, Expression source, OrderByClause orderbyClause, Type elementType) { if (orderbyClause != null) { @@ -953,8 +981,7 @@ private static Expression AddOrderByQueryForSource(QueryBinderContext context, E newSettings.HandleNullPropagation = HandleNullPropagationOption.True; QueryBinderContext binderContext = new QueryBinderContext(context, newSettings, elementType); - IOrderByBinder binder = binderContext.GetNestedOrderByBinder(); - source = binder.ApplyBind(source, orderbyClause, binderContext, false); + source = OrderByBinder.ApplyBind(source, orderbyClause, binderContext, false); } return source; diff --git a/src/Microsoft.AspNetCore.OData/Query/ODataQueryContextExtensions.cs b/src/Microsoft.AspNetCore.OData/Query/ODataQueryContextExtensions.cs index fcb6c0bda..85394b9ff 100644 --- a/src/Microsoft.AspNetCore.OData/Query/ODataQueryContextExtensions.cs +++ b/src/Microsoft.AspNetCore.OData/Query/ODataQueryContextExtensions.cs @@ -84,7 +84,7 @@ public static ISelectExpandBinder GetSelectExpandBinder(this ODataQueryContext c ISelectExpandBinder binder = context.RequestContainer?.GetService(); - return binder ?? new SelectExpandBinder(); + return binder ?? new SelectExpandBinder(context.GetFilterBinder(), context.GetOrderByBinder()); } /// diff --git a/src/Microsoft.AspNetCore.OData/Query/Query/ApplyQueryOptions.cs b/src/Microsoft.AspNetCore.OData/Query/Query/ApplyQueryOptions.cs index f60304fec..69aef541c 100644 --- a/src/Microsoft.AspNetCore.OData/Query/Query/ApplyQueryOptions.cs +++ b/src/Microsoft.AspNetCore.OData/Query/Query/ApplyQueryOptions.cs @@ -165,10 +165,7 @@ public IQueryable ApplyTo(IQueryable query, ODataQuerySettings querySettings) var filterTransformation = transformation as FilterTransformationNode; IFilterBinder binder = Context.GetFilterBinder(); - QueryBinderContext binderContext = new QueryBinderContext(Context.Model, querySettings, ResultClrType) - { - GetNestedFilterBinder = () => binder - }; + QueryBinderContext binderContext = new QueryBinderContext(Context.Model, querySettings, ResultClrType); query = binder.ApplyBind(query, filterTransformation.FilterClause, binderContext); } diff --git a/src/Microsoft.AspNetCore.OData/Query/Query/FilterQueryOption.cs b/src/Microsoft.AspNetCore.OData/Query/Query/FilterQueryOption.cs index 0f8edf98e..1c245f67e 100644 --- a/src/Microsoft.AspNetCore.OData/Query/Query/FilterQueryOption.cs +++ b/src/Microsoft.AspNetCore.OData/Query/Query/FilterQueryOption.cs @@ -143,10 +143,7 @@ public IQueryable ApplyTo(IQueryable query, ODataQuerySettings querySettings) Contract.Assert(filterClause != null); IFilterBinder binder = Context.GetFilterBinder(); - QueryBinderContext binderContext = new QueryBinderContext(Context.Model, querySettings, Context.ElementClrType) - { - GetNestedFilterBinder = () => binder - }; + QueryBinderContext binderContext = new QueryBinderContext(Context.Model, querySettings, Context.ElementClrType); return binder.ApplyBind(query, filterClause, binderContext); } diff --git a/src/Microsoft.AspNetCore.OData/Query/Query/OrderByQueryOption.cs b/src/Microsoft.AspNetCore.OData/Query/Query/OrderByQueryOption.cs index 2203571ef..0c750bdef 100644 --- a/src/Microsoft.AspNetCore.OData/Query/Query/OrderByQueryOption.cs +++ b/src/Microsoft.AspNetCore.OData/Query/Query/OrderByQueryOption.cs @@ -320,10 +320,7 @@ private IQueryable AddOrderByQueryForProperty(ODataQuerySettings querySettings, // TODO: need to refactor it later. orderbyClause = new OrderByClause(null, orderbyClause.Expression, orderbyClause.Direction, orderbyClause.RangeVariable); - QueryBinderContext binderContext = new QueryBinderContext(Context.Model, querySettings, Context.ElementClrType) - { - GetNestedFilterBinder = () => Context.GetFilterBinder() - }; + QueryBinderContext binderContext = new QueryBinderContext(Context.Model, querySettings, Context.ElementClrType); querySoFar = binder.ApplyBind(querySoFar, orderbyClause, binderContext, alreadyOrdered); diff --git a/src/Microsoft.AspNetCore.OData/Query/Query/SelectExpandQueryOption.cs b/src/Microsoft.AspNetCore.OData/Query/Query/SelectExpandQueryOption.cs index e4f050339..3c0aad62e 100644 --- a/src/Microsoft.AspNetCore.OData/Query/Query/SelectExpandQueryOption.cs +++ b/src/Microsoft.AspNetCore.OData/Query/Query/SelectExpandQueryOption.cs @@ -213,8 +213,6 @@ public IQueryable ApplyTo(IQueryable queryable, ODataQuerySettings settings) QueryBinderContext binderContext = new QueryBinderContext(Context.Model, settings, Context.ElementClrType) { NavigationSource = Context.NavigationSource, - GetNestedFilterBinder = () => Context.GetFilterBinder(), - GetNestedOrderByBinder = () => Context.GetOrderByBinder() }; return binder.ApplyBind(queryable, _selectExpandClause, binderContext); @@ -246,8 +244,6 @@ public object ApplyTo(object entity, ODataQuerySettings settings) QueryBinderContext binderContext = new QueryBinderContext(Context.Model, settings, Context.ElementClrType) { NavigationSource = Context.NavigationSource, - GetNestedFilterBinder = () => Context.GetFilterBinder(), - GetNestedOrderByBinder = () => Context.GetOrderByBinder() }; return binder.ApplyBind(entity, _selectExpandClause, binderContext); diff --git a/test/Microsoft.AspNetCore.OData.Tests/PublicApi/Microsoft.AspNetCore.OData.PublicApi.Net5.bsl b/test/Microsoft.AspNetCore.OData.Tests/PublicApi/Microsoft.AspNetCore.OData.PublicApi.Net5.bsl index c29bdfe66..ce8c98fc8 100644 --- a/test/Microsoft.AspNetCore.OData.Tests/PublicApi/Microsoft.AspNetCore.OData.PublicApi.Net5.bsl +++ b/test/Microsoft.AspNetCore.OData.Tests/PublicApi/Microsoft.AspNetCore.OData.PublicApi.Net5.bsl @@ -2685,8 +2685,6 @@ public class Microsoft.AspNetCore.OData.Query.Expressions.QueryBinderContext { System.Linq.Expressions.ParameterExpression CurrentParameter { public get; } System.Type ElementClrType { public get; } Microsoft.OData.Edm.IEdmType ElementType { public get; } - System.Func`1[[Microsoft.AspNetCore.OData.Query.Expressions.IFilterBinder]] GetNestedFilterBinder { public get; public set; } - System.Func`1[[Microsoft.AspNetCore.OData.Query.Expressions.IOrderByBinder]] GetNestedOrderByBinder { public get; public set; } Microsoft.OData.Edm.IEdmModel Model { public get; } Microsoft.OData.Edm.IEdmNavigationSource NavigationSource { public get; public set; } Microsoft.AspNetCore.OData.Query.ODataQuerySettings QuerySettings { public get; } @@ -2696,7 +2694,10 @@ public class Microsoft.AspNetCore.OData.Query.Expressions.QueryBinderContext { } public class Microsoft.AspNetCore.OData.Query.Expressions.SelectExpandBinder : ISelectExpandBinder { - public SelectExpandBinder () + public SelectExpandBinder (Microsoft.AspNetCore.OData.Query.Expressions.IFilterBinder filterBinder, Microsoft.AspNetCore.OData.Query.Expressions.IOrderByBinder orderByBinder) + + Microsoft.AspNetCore.OData.Query.Expressions.IFilterBinder FilterBinder { public get; } + Microsoft.AspNetCore.OData.Query.Expressions.IOrderByBinder OrderByBinder { public get; } public virtual System.Linq.Expressions.Expression BindSelectExpand (Microsoft.OData.UriParser.SelectExpandClause selectExpandClause, Microsoft.AspNetCore.OData.Query.Expressions.QueryBinderContext context) public virtual void BuildDynamicProperty (Microsoft.AspNetCore.OData.Query.Expressions.QueryBinderContext context, System.Linq.Expressions.Expression source, Microsoft.OData.Edm.IEdmStructuredType structuredType, System.Collections.Generic.IList`1[[Microsoft.AspNetCore.OData.Query.Container.NamedPropertyExpression]] includedProperties) diff --git a/test/Microsoft.AspNetCore.OData.Tests/PublicApi/Microsoft.AspNetCore.OData.PublicApi.NetCore31.bsl b/test/Microsoft.AspNetCore.OData.Tests/PublicApi/Microsoft.AspNetCore.OData.PublicApi.NetCore31.bsl index c29bdfe66..ce8c98fc8 100644 --- a/test/Microsoft.AspNetCore.OData.Tests/PublicApi/Microsoft.AspNetCore.OData.PublicApi.NetCore31.bsl +++ b/test/Microsoft.AspNetCore.OData.Tests/PublicApi/Microsoft.AspNetCore.OData.PublicApi.NetCore31.bsl @@ -2685,8 +2685,6 @@ public class Microsoft.AspNetCore.OData.Query.Expressions.QueryBinderContext { System.Linq.Expressions.ParameterExpression CurrentParameter { public get; } System.Type ElementClrType { public get; } Microsoft.OData.Edm.IEdmType ElementType { public get; } - System.Func`1[[Microsoft.AspNetCore.OData.Query.Expressions.IFilterBinder]] GetNestedFilterBinder { public get; public set; } - System.Func`1[[Microsoft.AspNetCore.OData.Query.Expressions.IOrderByBinder]] GetNestedOrderByBinder { public get; public set; } Microsoft.OData.Edm.IEdmModel Model { public get; } Microsoft.OData.Edm.IEdmNavigationSource NavigationSource { public get; public set; } Microsoft.AspNetCore.OData.Query.ODataQuerySettings QuerySettings { public get; } @@ -2696,7 +2694,10 @@ public class Microsoft.AspNetCore.OData.Query.Expressions.QueryBinderContext { } public class Microsoft.AspNetCore.OData.Query.Expressions.SelectExpandBinder : ISelectExpandBinder { - public SelectExpandBinder () + public SelectExpandBinder (Microsoft.AspNetCore.OData.Query.Expressions.IFilterBinder filterBinder, Microsoft.AspNetCore.OData.Query.Expressions.IOrderByBinder orderByBinder) + + Microsoft.AspNetCore.OData.Query.Expressions.IFilterBinder FilterBinder { public get; } + Microsoft.AspNetCore.OData.Query.Expressions.IOrderByBinder OrderByBinder { public get; } public virtual System.Linq.Expressions.Expression BindSelectExpand (Microsoft.OData.UriParser.SelectExpandClause selectExpandClause, Microsoft.AspNetCore.OData.Query.Expressions.QueryBinderContext context) public virtual void BuildDynamicProperty (Microsoft.AspNetCore.OData.Query.Expressions.QueryBinderContext context, System.Linq.Expressions.Expression source, Microsoft.OData.Edm.IEdmStructuredType structuredType, System.Collections.Generic.IList`1[[Microsoft.AspNetCore.OData.Query.Container.NamedPropertyExpression]] includedProperties) diff --git a/test/Microsoft.AspNetCore.OData.Tests/Query/Expressions/BinderExtensionsTests.cs b/test/Microsoft.AspNetCore.OData.Tests/Query/Expressions/BinderExtensionsTests.cs index 386fac0e1..cee211918 100644 --- a/test/Microsoft.AspNetCore.OData.Tests/Query/Expressions/BinderExtensionsTests.cs +++ b/test/Microsoft.AspNetCore.OData.Tests/Query/Expressions/BinderExtensionsTests.cs @@ -135,7 +135,6 @@ private static Expression BindFilter(string filter, IEdmModel model, ODataQue QueryBinderContext context = new QueryBinderContext(model, querySettings, elementType) { AssembliesResolver = assembliesResolver, - GetNestedFilterBinder = () => new FilterBinder() }; IFilterBinder filterBinder = new FilterBinder(); diff --git a/test/Microsoft.AspNetCore.OData.Tests/Query/Expressions/FilterBinderTests.cs b/test/Microsoft.AspNetCore.OData.Tests/Query/Expressions/FilterBinderTests.cs index 03b8abf79..887d42cd0 100644 --- a/test/Microsoft.AspNetCore.OData.Tests/Query/Expressions/FilterBinderTests.cs +++ b/test/Microsoft.AspNetCore.OData.Tests/Query/Expressions/FilterBinderTests.cs @@ -3112,7 +3112,6 @@ internal static Expression BindFilter(IEdmModel model, FilterClause filterClause QueryBinderContext context = new QueryBinderContext(model, querySettings, elementType) { AssembliesResolver = resolver ?? AssemblyResolverHelper.Default, - GetNestedFilterBinder = () => binder }; return binder.BindFilter(filterClause, context); diff --git a/test/Microsoft.AspNetCore.OData.Tests/Query/Expressions/FilterBinderTestsHelper.cs b/test/Microsoft.AspNetCore.OData.Tests/Query/Expressions/FilterBinderTestsHelper.cs index 80ebe5fbf..1af89da45 100644 --- a/test/Microsoft.AspNetCore.OData.Tests/Query/Expressions/FilterBinderTestsHelper.cs +++ b/test/Microsoft.AspNetCore.OData.Tests/Query/Expressions/FilterBinderTestsHelper.cs @@ -45,7 +45,6 @@ public static Expression TestBind(FilterClause filterClause, Type filterType, IE QueryBinderContext context = new QueryBinderContext(model, querySettings, filterType) { AssembliesResolver = assembliesResolver, - GetNestedFilterBinder = () => binder }; return binder.BindFilter(filterClause, context); diff --git a/test/Microsoft.AspNetCore.OData.Tests/Query/Expressions/OrderByBinderTests.cs b/test/Microsoft.AspNetCore.OData.Tests/Query/Expressions/OrderByBinderTests.cs index 01121843c..02f79988a 100644 --- a/test/Microsoft.AspNetCore.OData.Tests/Query/Expressions/OrderByBinderTests.cs +++ b/test/Microsoft.AspNetCore.OData.Tests/Query/Expressions/OrderByBinderTests.cs @@ -322,7 +322,6 @@ private static OrderByBinderResult BindOrderBy(string orderBy, IEdmModel mode QueryBinderContext context = new QueryBinderContext(model, querySettings, elementType) { AssembliesResolver = assembliesResolver, - GetNestedFilterBinder = () => new FilterBinder() }; IOrderByBinder orderByBinder = new OrderByBinder(); diff --git a/test/Microsoft.AspNetCore.OData.Tests/Query/Expressions/SelectExpandBinderTest.cs b/test/Microsoft.AspNetCore.OData.Tests/Query/Expressions/SelectExpandBinderTest.cs index d11818785..3ffa7d0dc 100644 --- a/test/Microsoft.AspNetCore.OData.Tests/Query/Expressions/SelectExpandBinderTest.cs +++ b/test/Microsoft.AspNetCore.OData.Tests/Query/Expressions/SelectExpandBinderTest.cs @@ -53,7 +53,7 @@ public SelectExpandBinderTest() _settings = new ODataQuerySettings { HandleNullPropagation = HandleNullPropagationOption.False }; _context = new ODataQueryContext(_model, typeof(QueryCustomer)) { RequestContainer = new MockServiceProvider() }; - _binder = new SelectExpandBinder(); + _binder = new SelectExpandBinder(new FilterBinder(), new OrderByBinder()); QueryCustomer customer = new QueryCustomer { @@ -68,8 +68,6 @@ public SelectExpandBinderTest() _queryBinderContext = new QueryBinderContext(_model, _settings, selectExpandQueryOption.Context.ElementClrType) { - GetNestedOrderByBinder = () => new OrderByBinder(), - GetNestedFilterBinder = () => new FilterBinder(), NavigationSource = _context.NavigationSource }; } @@ -80,7 +78,7 @@ private static SelectExpandBinder GetBinder(IEdmModel model, HandleNullPropag var context = new ODataQueryContext(model, typeof(T)) { RequestContainer = new MockServiceProvider() }; - return new SelectExpandBinder(); + return new SelectExpandBinder(new FilterBinder(), new OrderByBinder()); } //[Fact]