sort fix.
This commit is contained in:
parent
788078bc49
commit
7a39d70a3e
@ -32,5 +32,62 @@ namespace PoweredSoft.DynamicQuery.Test
|
||||
Assert.Equal(shouldResult, result.Data);
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MultiSort()
|
||||
{
|
||||
MockContextFactory.SeedAndTestContextFor("SortTests_MultiSort", TestSeeders.SimpleSeedScenario, ctx =>
|
||||
{
|
||||
var shouldResult = ctx.Orders.OrderBy(t => t.Customer.FirstName).ThenBy(t => t.OrderNum).ToList();
|
||||
|
||||
// query handler that is empty should be the same as running to list.
|
||||
var criteria = new QueryCriteria()
|
||||
{
|
||||
Sorts = new List<ISort>()
|
||||
{
|
||||
new Sort("Customer.FirstName"),
|
||||
new Sort("OrderNum")
|
||||
}
|
||||
};
|
||||
|
||||
var queryHandler = new QueryHandler();
|
||||
var result = queryHandler.Execute(ctx.Orders, criteria);
|
||||
Assert.Equal(shouldResult, result.Data);
|
||||
});
|
||||
}
|
||||
|
||||
private class MockSortInterceptor : ISortInterceptor
|
||||
{
|
||||
public IEnumerable<ISort> InterceptSort(IEnumerable<ISort> sort)
|
||||
{
|
||||
if (sort.Count() == 1 && sort.First().Path == "OrderNumStr")
|
||||
return new ISort[] { new Sort("OrderNum", false) };
|
||||
|
||||
return sort;
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SortInterceptor()
|
||||
{
|
||||
MockContextFactory.SeedAndTestContextFor("SortTests_SortInterceptor", TestSeeders.SimpleSeedScenario, ctx =>
|
||||
{
|
||||
var shouldResult = ctx.Orders.OrderByDescending(t => t.OrderNum).ToList();
|
||||
|
||||
// query handler that is empty should be the same as running to list.
|
||||
var criteria = new QueryCriteria()
|
||||
{
|
||||
Sorts = new List<ISort>()
|
||||
{
|
||||
new Sort("OrderNumStr", false)
|
||||
}
|
||||
};
|
||||
|
||||
var queryHandler = new QueryHandler();
|
||||
queryHandler.AddInterceptor(new MockSortInterceptor());
|
||||
var result = queryHandler.Execute(ctx.Orders, criteria);
|
||||
Assert.Equal(shouldResult, result.Data);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -68,11 +68,18 @@ namespace PoweredSoft.DynamicQuery
|
||||
return;
|
||||
}
|
||||
|
||||
bool isAppending = false;
|
||||
Criteria.Sorts.ForEach(sort =>
|
||||
{
|
||||
var transformedSort = InterceptSort<T>(sort);
|
||||
if (transformedSort.Count == 0)
|
||||
return;
|
||||
|
||||
transformedSort.ForEach(ts =>
|
||||
{
|
||||
CurrentQueryable = CurrentQueryable.OrderBy(ts.Path, ts.Ascending == false ? QueryOrderByDirection.Descending : QueryOrderByDirection.Ascending, isAppending);
|
||||
isAppending = true;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user