/// <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); }
public static string AbsolutePaginationUrlForPage <T>( this IUrlHelper urlHelper, AbstractPagingRequest <T> abstractPagingRequest, int page) { abstractPagingRequest.Page = page; return(urlHelper.AbsoluteActionUrl(abstractPagingRequest)); }
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)); }
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); }
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)); }
public static IQueryable <T> ApplySorting <T>(this IQueryable <T> query, AbstractPagingRequest <T> pagingRequest) { return(pagingRequest.SetUpSorting(query)); }
public static IQueryable <T> ApplyFilter <T>(this IQueryable <T> query, AbstractPagingRequest <T> pagingRequest) { return(pagingRequest.GetFilteredQuery(query)); }