Skip to content

Commit e7ae0ce

Browse files
ElizabethOkerioxuzhg
authored andcommitted
fix $apply with $groupby with more than one property
1 parent 32b9b0a commit e7ae0ce

3 files changed

Lines changed: 21 additions & 2 deletions

File tree

src/Microsoft.AspNetCore.OData/Query/Expressions/BinderExtensions.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,8 +166,6 @@ public static IQueryable ApplyBind(this IOrderByBinder binder, IQueryable query,
166166
throw Error.ArgumentNull(nameof(context));
167167
}
168168

169-
context.EnsureFlattenedProperties(context.CurrentParameter, query);
170-
171169
OrderByBinderResult orderByResult = binder.BindOrderBy(orderByClause, context);
172170
IQueryable querySoFar = query;
173171

src/Microsoft.AspNetCore.OData/Query/Query/OrderByQueryOption.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,8 @@ private IOrderedQueryable ApplyToCore(IQueryable query, ODataQuerySettings query
255255
binderContext.AddComputedProperties(Compute.ComputeClause.ComputedItems);
256256
}
257257

258+
binderContext.EnsureFlattenedProperties(binderContext.CurrentParameter, query);
259+
258260
foreach (OrderByNode node in nodes)
259261
{
260262
OrderByPropertyNode propertyNode = node as OrderByPropertyNode;

test/Microsoft.AspNetCore.OData.E2E.Tests/EntitySetAggregation/EntitySetAggregationTests.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,25 @@ public async Task GroupByWithAggregationAndOrderByDynamicPropsWorks()
150150
Assert.Equal(expectedResult, stringObject.ToString());
151151
}
152152

153+
[Fact]
154+
public async Task GroupByMoreThanOnePropertyWithDollarTopWorks()
155+
{
156+
// Arrange
157+
string queryUrl = "aggregation/Orders?$apply=groupby((Id, Name),aggregate(Price with sum as TotalPrice))&$top=1";
158+
string expectedResult = "{\"value\":[{\"Name\":\"Order2\",\"Id\":1,\"TotalPrice\":25}]}";
159+
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, queryUrl);
160+
request.Headers.Accept.Add(MediaTypeWithQualityHeaderValue.Parse("application/json;odata.metadata=none"));
161+
162+
// Act
163+
HttpResponseMessage response = await Client.SendAsync(request);
164+
165+
// Assert
166+
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
167+
var stringObject = await response.Content.ReadAsStringAsync();
168+
169+
Assert.Equal(expectedResult, stringObject.ToString());
170+
}
171+
153172
[Fact]
154173
public async Task AggregationWithFilterWorks()
155174
{

0 commit comments

Comments
 (0)