public RentalRequestPageViewModel GetRentalRequests(Int32 page, Int32 pageSize) { RentalRequestPageDto announcements = _rentalRequestService.GetPageWithFilters(page, pageSize, HttpContext.Current.Request.QueryString); RentalRequestPageViewModel results = _mapper.Map <RentalRequestPageViewModel>(announcements); return(results); }
public RentalRequestPageDto GetPageWithFilters(Int32 pageNumber, Int32 pageSize, NameValueCollection filteringParams) { Int32 maxCost, minCost, maxArea, minArea; try { maxCost = String.IsNullOrEmpty(filteringParams["maxCost"]) ? Int32.MaxValue : Int32.Parse(filteringParams["maxCost"]); minCost = String.IsNullOrEmpty(filteringParams["minCost"]) ? 0 : Int32.Parse(filteringParams["minCost"]); maxArea = String.IsNullOrEmpty(filteringParams["maxArea"]) ? Int32.MaxValue : Int32.Parse(filteringParams["maxArea"]); minArea = String.IsNullOrEmpty(filteringParams["minArea"]) ? 0 : Int32.Parse(filteringParams["minArea"]); } catch { throw new ArgumentException("Invalid filter parameter"); } IQueryable <RentalRequest> requests = _repository.GetAll(); requests = requests.Where(request => (request.MaxPrice >= minCost && request.MaxPrice <= maxCost) && (request.Area >= minArea && request.Area <= maxArea)); int skip = (pageNumber - 1) * pageSize; Int32 requestCount = (int)Math.Ceiling(requests.Count() / (float)pageSize); requests = requests.OrderByDescending(g => g.Id).Skip(skip).Take(pageSize); List <RentalRequestDto> rentalRequestDtos = _mapper.Map <IEnumerable <RentalRequest>, List <RentalRequestDto> >(requests); RentalRequestPageDto rentalRequestPageDto = new RentalRequestPageDto { CurrentPage = pageNumber, PageCount = requestCount, RentalRequests = rentalRequestDtos }; return(rentalRequestPageDto); }