diff --git a/src/Microsoft.AspNetCore.OData/Query/Expressions/BinderExtensions.cs b/src/Microsoft.AspNetCore.OData/Query/Expressions/BinderExtensions.cs index bd1f25522..477428413 100644 --- a/src/Microsoft.AspNetCore.OData/Query/Expressions/BinderExtensions.cs +++ b/src/Microsoft.AspNetCore.OData/Query/Expressions/BinderExtensions.cs @@ -166,8 +166,6 @@ public static IQueryable ApplyBind(this IOrderByBinder binder, IQueryable query, throw Error.ArgumentNull(nameof(context)); } - context.EnsureFlattenedProperties(context.CurrentParameter, query); - OrderByBinderResult orderByResult = binder.BindOrderBy(orderByClause, context); IQueryable querySoFar = query; diff --git a/src/Microsoft.AspNetCore.OData/Query/Query/OrderByQueryOption.cs b/src/Microsoft.AspNetCore.OData/Query/Query/OrderByQueryOption.cs index 9f4a8e593..7b8b215ac 100644 --- a/src/Microsoft.AspNetCore.OData/Query/Query/OrderByQueryOption.cs +++ b/src/Microsoft.AspNetCore.OData/Query/Query/OrderByQueryOption.cs @@ -255,6 +255,8 @@ private IOrderedQueryable ApplyToCore(IQueryable query, ODataQuerySettings query binderContext.AddComputedProperties(Compute.ComputeClause.ComputedItems); } + binderContext.EnsureFlattenedProperties(binderContext.CurrentParameter, query); + foreach (OrderByNode node in nodes) { OrderByPropertyNode propertyNode = node as OrderByPropertyNode; diff --git a/test/Microsoft.AspNetCore.OData.E2E.Tests/EntitySetAggregation/EntitySetAggregationTests.cs b/test/Microsoft.AspNetCore.OData.E2E.Tests/EntitySetAggregation/EntitySetAggregationTests.cs index c62867768..19d5044d4 100644 --- a/test/Microsoft.AspNetCore.OData.E2E.Tests/EntitySetAggregation/EntitySetAggregationTests.cs +++ b/test/Microsoft.AspNetCore.OData.E2E.Tests/EntitySetAggregation/EntitySetAggregationTests.cs @@ -150,6 +150,25 @@ public async Task GroupByWithAggregationAndOrderByDynamicPropsWorks() Assert.Equal(expectedResult, stringObject.ToString()); } + [Fact] + public async Task GroupByMoreThanOnePropertyWithDollarTopWorks() + { + // Arrange + string queryUrl = "aggregation/Orders?$apply=groupby((Id, Name),aggregate(Price with sum as TotalPrice))&$top=1"; + string expectedResult = "{\"value\":[{\"Name\":\"Order2\",\"Id\":1,\"TotalPrice\":25}]}"; + HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, queryUrl); + request.Headers.Accept.Add(MediaTypeWithQualityHeaderValue.Parse("application/json;odata.metadata=none")); + + // Act + HttpResponseMessage response = await Client.SendAsync(request); + + // Assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + var stringObject = await response.Content.ReadAsStringAsync(); + + Assert.Equal(expectedResult, stringObject.ToString()); + } + [Fact] public async Task AggregationWithFilterWorks() {