public static IQueryable <T> AsPaginatedQuery <T>(this IQueryable <T> query, IPaginatedQuery request) { if (request == null) { return(query); } var result = query; if (!string.IsNullOrWhiteSpace(request.SortBy)) { if (request.SortOrder.Equals("DESC", System.StringComparison.OrdinalIgnoreCase)) { result = result.OrderByDescending(p => EF.Property <object>(p !, request.SortBy)); } else { result = result.OrderBy(p => EF.Property <object>(p !, request.SortBy)); } } result = result.Skip(((request.StartPage ?? 1) - 1) * (request.PerPage ?? 0)); if (request.PerPage != null) { result = result.Take(request.PerPage.Value); } return(result); }
public static async Task <TResultContainer> PageAsync <TResult, TResultContainer>(this IQueryable <TResult> queryable, IPaginatedQuery query) where TResultContainer : PagedResult <TResult>, new() { var resultContainer = new TResultContainer(); var result = await queryable.PageAsync(query.Page ?? 1, query.Size ?? 20); resultContainer.Count = result.Count; resultContainer.Size = result.Size; resultContainer.Page = result.Page; resultContainer.Result = result.Result; resultContainer.Pages = result.Pages; return(resultContainer); }