public async Task <ActionResult <IEnumerable <Agency> > > GetAllAsync( [FromServices] IAgencyRepository repository, [FromQuery] PagedAgencyParameters pageParameters, [FromQuery] bool?isCapital, [FromQuery] bool?isStation, [FromQuery] bool?isOpen ) { var agencies = await repository.GetAll( pageParameters, isCapital, isStation, isOpen ); var metadata = new { agencies.TotalCount, agencies.PageSize, agencies.CurrentPage, agencies.TotalPages, agencies.HasNext, agencies.HasPrevious }; Response.Headers.Add( "X-Pagination", JsonSerializer.Serialize(metadata) ); return(Ok(agencies)); }
public async Task <PagedList <Agency> > GetAll( PagedAgencyParameters pagedParameters, bool?isCapital, bool?isStation, bool?isOpen ) { var dbQuery = _context.Agencies .AsNoTracking() .AsQueryable(); if (isCapital.HasValue) { dbQuery = dbQuery.Where(a => a.IsCapital == isCapital); } if (isStation.HasValue) { dbQuery = dbQuery.Where(a => a.IsStation == isStation); } var localQuery = await dbQuery.ToListAsync <Agency>(); if (isOpen.HasValue) { localQuery = localQuery .Where(a => a.IsOpen == isOpen) .OrderBy(a => a.DistanceInKm) .ToList(); } else { localQuery = localQuery .OrderBy(a => a.DistanceInKm) .ToList(); } var pagedAgencies = PagedList <Agency> .ToPagedList( localQuery, pagedParameters.PageNumber, pagedParameters.PageSize); return(pagedAgencies); }