Ejemplo n.º 1
0
 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));
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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));
        }
Ejemplo n.º 8
0
 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);