private string CreatePagedLinkRelToCurrentPage <T>(IPaginatedResult <T> paginatedResult, List <KeyValuePair <string, string> > filters, string orderBy, IUrlHelper urlHelper,
                                                    string pageRouteName, int pagesFromCurrentPage) where T : class
 {
     return(CreatePageLink(pageSize: paginatedResult.PageSize,
                           pageNumber: paginatedResult.CurrentPage + pagesFromCurrentPage,
                           pageRouteName: pageRouteName,
                           filters: filters,
                           orderBy: orderBy,
                           urlHelper: urlHelper));
 }
        public PaginationHeaderResponse AddPaginationHeaderMetaDataToResponse <T>(IPaginatedResult <T> paginatedResult, List <KeyValuePair <string, string> > filters, string orderBy, string pageRouteName,
                                                                                  IUrlHelper urlHelper, HttpResponse response) where T : class
        {
            var previousPageLink = paginatedResult.CurrentPage > 1
                ? CreatePagedLinkRelToCurrentPage(paginatedResult, filters, orderBy, urlHelper, pageRouteName, -1)
                : null;


            var nextPageLink = HasNextPage(paginatedResult)
                ? CreatePagedLinkRelToCurrentPage(paginatedResult, filters, orderBy, urlHelper, pageRouteName, 1)
                : null;

            var first = CreatePageLink(pageSize: paginatedResult.PageSize,
                                       pageNumber: 1,
                                       pageRouteName: pageRouteName,
                                       filters: filters,
                                       orderBy: orderBy,
                                       urlHelper: urlHelper);

            var last = CreatePageLink(pageSize: paginatedResult.PageSize,
                                      pageNumber: GetTotalPages(paginatedResult),
                                      pageRouteName: pageRouteName,
                                      filters: filters,
                                      orderBy: orderBy,
                                      urlHelper: urlHelper);

            PaginationHeaderResponse paginationHeaderResponse = new PaginationHeaderResponse
            {
                Total   = GetTotalPages(paginatedResult),
                Size    = paginatedResult.PageSize,
                Count   = paginatedResult.RowCount,
                Current = paginatedResult.CurrentPage,
                Prev    = previousPageLink,
                Next    = nextPageLink,
                First   = first,
                Last    = last
            };


            response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(paginationHeaderResponse));

            return(paginationHeaderResponse);
        }
        public async Task<ActionResult<IEnumerable<SummarisedActualDto>>> Get(CancellationToken cancellationToken, string collectionReturnCode, string collectionType,  [FromQuery]int? pageSize = null, [FromQuery]int? pageNumber = null)
        {
            if (string.IsNullOrWhiteSpace(collectionReturnCode) ||
                string.IsNullOrWhiteSpace(collectionType))
            {
                return BadRequest();
            }

            IPaginatedResult<SummarisedActualDto> summarisedActuals = await _summarisedActualsRepository.GetSummarisedActuals(cancellationToken, collectionType, collectionReturnCode, pageSize ?? DefaultConstants.DefaultPageSize, pageNumber ?? DefaultConstants.DefaultPageNumber);

            _logger.LogVerbose($"Exiting Get Summarised Actuals, data count : {summarisedActuals.TotalItems}");

            if (summarisedActuals?.TotalItems > 0)
            {
                Response.AddPaginationHeader(summarisedActuals);
                return Ok(summarisedActuals.List);
            }

            return NoContent();
        }
        public void ShouldGetEmptyPaginatedAccountsPageIfBiggerThanCollection()
        {
            //Arrange
            Account account1 = new Account()
            {
                AccountTypeId      = 1,
                PersonId           = 1,
                IdentityProviderId = "000-000-000",
                IsActive           = true
            };
            Account account2 = new Account()
            {
                AccountTypeId      = 1,
                PersonId           = 1,
                IdentityProviderId = "111-111-111",
                IsActive           = true
            };
            Account account3 = new Account()
            {
                AccountTypeId      = 1,
                PersonId           = 1,
                IdentityProviderId = "222-222-222",
                IsActive           = true
            };

            _db.Accounts.Add(account1);
            _db.Accounts.Add(account2);
            _db.Accounts.Add(account3);
            _db.SaveChanges();

            //Act
            IPaginatedResult <IAccountDetail> result = _uow.AccountsRepository.PaginatedGetAllDetails(2, 3);

            //Assert
            Assert.IsEmpty(result.Items);
            Assert.AreEqual(0, result.Items.Count());
            Assert.AreEqual(3, result.TotalItems);
        }
 private bool HasNextPage <T>(IPaginatedResult <T> paginatedResult) where T : class
 {
     return(paginatedResult.RowCount >
            paginatedResult.CurrentPage * paginatedResult.PageSize);
 }
 private int GetTotalPages <T>(IPaginatedResult <T> paginatedResult) where T : class
 {
     return(Convert.ToInt32(Math.Ceiling((paginatedResult.RowCount / (decimal)paginatedResult.PageSize)))); // 1 based page numbering
 }
示例#7
0
 /// <summary>
 /// Convert all elements of paginated result, using passed function.
 /// </summary>
 /// <typeparam name="TTo"></typeparam>
 /// <typeparam name="TFrom"></typeparam>
 /// <param name="paginatedResult"></param>
 /// <param name="convertingFunc"></param>
 /// <returns></returns>
 public static IPaginatedResult <TTo> MapTo <TTo, TFrom>(this IPaginatedResult <TFrom> paginatedResult, Func <TFrom, TTo> convertingFunc)
     where TFrom : class
     where TTo : class
 {
     return(new PaginatedResult <TTo>(paginatedResult.Page, paginatedResult.PerPage, paginatedResult.Total, paginatedResult.Data.Select(x => convertingFunc.Invoke(x))));
 }