public QueryOptions( ISearchOptions searchOptions, IEnumerable <ISortOptions> sortOptions, IPaginationOptions paginationOptions) { SearchOptions = searchOptions; SortOptions = sortOptions; PaginationOptions = paginationOptions; }
public static IPagedResult <TModel> GetPage <TModel>(this IQueryable <TModel> query, IPaginationOptions paginationOptions) { var page = paginationOptions?.Page ?? 1; var totalCount = query.Count(); var size = paginationOptions?.Size ?? totalCount; var result = query.Skip((page - 1) * size).Take(size).ToList(); return(new PagedResult <TModel>(result, totalCount)); }
public static Uri GetPreviousPageUri <TParameters>(this IPaginationOptions <TParameters> pagination, Uri baseUri) where TParameters : class, IPagingParameters, ISortingParameters, new() { var previousPage = pagination.PreviousPage(); if (previousPage != null) { var ub = new UriBuilder(baseUri) { Query = QueryStringParser <TParameters> .Parse(previousPage).ToString() }; return(ub.Uri); } return(baseUri); }
public static Uri GetNextPageUri <TParameters>(this IPaginationOptions <TParameters> pagination, Uri baseUri) where TParameters : class, IPagingParameters, ISortingParameters, new() { var nextPage = pagination.NextPage(); if (nextPage != null) { var ub = new UriBuilder(baseUri) { Query = QueryStringParser <TParameters> .ToQueryString(nextPage) }; return(ub.Uri); } return(baseUri); }
public static Uri GetPageUri <TParameters>(this IPaginationOptions <TParameters> pagination, int page, Uri baseUri) where TParameters : class, IPagingParameters, ISortingParameters, new() { var parameters = pagination.ForPage(page); if (parameters != null) { var ub = new UriBuilder(baseUri) { Query = QueryStringParser <TParameters> .ToQueryString(parameters) }; return(ub.Uri); } return(baseUri); }
public static IQueryable <TModel> ApplyOptions <TModel>( this IQueryable <TModel> query, IPaginationOptions options, int maxItemsPerPage, out IPaginationOptions appliedOptions) where TModel : IQueryModel { if (options == null) { appliedOptions = null; return(query.Take(maxItemsPerPage)); } appliedOptions = new PaginationOptions { ItemsPerPage = Math.Max( Math.Min(options.ItemsPerPage, maxItemsPerPage), 1), Page = Math.Max(options.Page, 1) }; return(query.ApplyOptions(appliedOptions)); }
public static string SearchifyMvcSearchPreviousPage <TParameters>(this UrlHelper urlHelper, IPaginationOptions <TParameters> paginationOptions) where TParameters : Parameters, new() { var uri = paginationOptions.GetPreviousPageUri(new Uri($"http://tempuri.org{urlHelper.Action()}")); return(uri.GetComponents(UriComponents.PathAndQuery, UriFormat.Unescaped)); }
private static IQueryable <TModel> ApplyOptions <TModel>( this IQueryable <TModel> query, IPaginationOptions options) where TModel : IQueryModel => query .Skip((options.Page - 1) * options.ItemsPerPage) .Take(options.ItemsPerPage);