/// <summary>
        /// Gets filtered and paged result
        /// </summary>
        /// <typeparam name="TEntity">The type of the ntity.</typeparam>
        /// <typeparam name="TDto">The type of to.</typeparam>
        /// <param name="query">The query.</param>
        /// <param name="pagingRequest">The paging request.</param>
        /// <remarks>
        /// Does two round trips to DB.
        /// </remarks>
        /// <returns></returns>
        public static async Task <PagedResult <TEntity> > ToPagedResultAsync <TEntity>(
            this IQueryable <TEntity> query,
            AbstractPagingRequest <TEntity> pagingRequest,
            Func <IQueryable <TEntity>, IIncludableQueryable <TEntity, object> > include = null)
        {
            query = query.ApplyFilter(pagingRequest);

            int totalResults = await query.CountAsync();

            if (include != null)
            {
                query = include(query);
            }

            IEnumerable <TEntity> data = await query.ApplySorting(pagingRequest)
                                         .ApplyPagination(pagingRequest)
                                         .ToListAsync();

            PagedResult <TEntity> pagedResult = new PagedResult <TEntity>
            {
                Count = totalResults,
                Data  = data
            };

            if (pagingRequest.PageSize != 0)
            {
                int pageCount = (int)Math.Ceiling(totalResults / (double)pagingRequest.PageSize);
                pagedResult.Count = pageCount;
            }

            return(pagedResult);
        }
Exemplo n.º 2
0
 public static string AbsolutePaginationUrlForPage <T>(
     this IUrlHelper urlHelper,
     AbstractPagingRequest <T> abstractPagingRequest,
     int page)
 {
     abstractPagingRequest.Page = page;
     return(urlHelper.AbsoluteActionUrl(abstractPagingRequest));
 }
Exemplo n.º 3
0
        public static IQueryable <T> ApplyPagination <T>(this IQueryable <T> query, AbstractPagingRequest <T> pagingRequest)
        {
            if (pagingRequest.PageSize.Value == 0)
            {
                return(query);
            }
            int numberOfElementsToSkip = (pagingRequest.Page.Value - 1) * pagingRequest.PageSize.Value;

            return(query.Skip(numberOfElementsToSkip).Take(pagingRequest.PageSize.Value));
        }
Exemplo n.º 4
0
        public static async Task <PagedResult <TDto> > ToPagedResultAsync <TEntity, TDto>(
            this IQueryable <TEntity> query,
            AbstractPagingRequest <TEntity> pagingRequest,
            IConfigurationProvider configurationProvider,
            IUrlHelper urlHelper)
        {
            query = query.ApplyFilter(pagingRequest);

            int totalResults = await query.CountAsync();

            IEnumerable <TDto> data = await query.ApplySorting(pagingRequest)
                                      .ApplyPagination(pagingRequest)
                                      .ProjectTo <TDto>(configurationProvider)
                                      .ToListAsync();

            PagedResult <TDto> pagedResult = new PagedResult <TDto>
            {
                Count = totalResults,
                Data  = data
            };

            if (pagingRequest.PageSize != 0)
            {
                int pageCount = (int)Math.Ceiling(totalResults / (double)pagingRequest.PageSize);
                pagedResult.PageCount = pageCount;
                int requestedPage = pagingRequest.Page.Value;

                if (requestedPage < pageCount)
                {
                    pagedResult.NextPageUrl = urlHelper.AbsolutePaginationUrlForPage(pagingRequest, requestedPage + 1);
                }

                if (requestedPage > 1)
                {
                    pagedResult.PreviousPageUrl = urlHelper.AbsolutePaginationUrlForPage(pagingRequest, requestedPage - 1);
                }

                pagedResult.FirstPagUrl = urlHelper.AbsolutePaginationUrlForPage(pagingRequest, 1);
                pagedResult.LastPageUrl = urlHelper.AbsolutePaginationUrlForPage(pagingRequest, pageCount);
            }

            return(pagedResult);
        }
Exemplo n.º 5
0
        public static string AbsoluteActionUrl <T>(this IUrlHelper urlHelper, AbstractPagingRequest <T> abstractPagingRequest)
        {
            if (urlHelper == null)
            {
                throw new ArgumentNullException(nameof(urlHelper));
            }

            HttpContext      httpContext      = urlHelper.ActionContext.HttpContext;
            RouteData        routeData        = httpContext.GetRouteData();
            string           actionName       = routeData.Values[ACTION] as string;
            string           controllerName   = routeData.Values[CONTROLLER] as string;
            UrlActionContext urlActionContext = new UrlActionContext();

            urlActionContext.Action     = new UrlActionContext().Action = actionName;
            urlActionContext.Controller = new UrlActionContext().Controller = controllerName;
            urlActionContext.Values     = abstractPagingRequest;
            urlActionContext.Protocol   = urlHelper.ActionContext.HttpContext.Request.Scheme;
            return(urlHelper.Action(urlActionContext));
        }
Exemplo n.º 6
0
 public static IQueryable <T> ApplySorting <T>(this IQueryable <T> query, AbstractPagingRequest <T> pagingRequest)
 {
     return(pagingRequest.SetUpSorting(query));
 }
Exemplo n.º 7
0
 public static IQueryable <T> ApplyFilter <T>(this IQueryable <T> query, AbstractPagingRequest <T> pagingRequest)
 {
     return(pagingRequest.GetFilteredQuery(query));
 }