Skip to content

Commit

Permalink
Factor out ordering variants
Browse files Browse the repository at this point in the history
  • Loading branch information
mrahhal committed May 13, 2023
1 parent 9e5c56f commit 37fec97
Showing 1 changed file with 18 additions and 4 deletions.
22 changes: 18 additions & 4 deletions src/MR.EntityFrameworkCore.KeysetPagination/KeysetColumn.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,16 +67,30 @@ public override Expression MakeAccessExpression(ParameterExpression parameter)

public override IOrderedQueryable<T> ApplyOrderBy(IQueryable<T> query, KeysetPaginationDirection direction)
{
var lambdaExpression = MakeAccessLambdaExpression();
var isDescending = direction == KeysetPaginationDirection.Backward ? !IsDescending : IsDescending;
return isDescending ? query.OrderByDescending(lambdaExpression) : query.OrderBy(lambdaExpression);
return ApplyOrderByVariant(
query, direction,
Queryable.OrderBy,
Queryable.OrderByDescending);
}

public override IOrderedQueryable<T> ApplyThenOrderBy(IOrderedQueryable<T> query, KeysetPaginationDirection direction)
{
return ApplyOrderByVariant(
query, direction,
Queryable.ThenBy,
Queryable.ThenByDescending);
}

private IOrderedQueryable<T> ApplyOrderByVariant<TQueryable>(
TQueryable query,
KeysetPaginationDirection direction,
Func<TQueryable, Expression<Func<T, TColumn>>, IOrderedQueryable<T>> ascendingVariant,
Func<TQueryable, Expression<Func<T, TColumn>>, IOrderedQueryable<T>> descendingVariant)
where TQueryable : IQueryable<T>
{
var lambdaExpression = MakeAccessLambdaExpression();
var isDescending = direction == KeysetPaginationDirection.Backward ? !IsDescending : IsDescending;
return isDescending ? query.ThenByDescending(lambdaExpression) : query.ThenBy(lambdaExpression);
return isDescending ? descendingVariant(query, lambdaExpression) : ascendingVariant(query, lambdaExpression);
}

public override object ObtainValue<TReference>(TReference reference)
Expand Down

0 comments on commit 37fec97

Please sign in to comment.