public RentalAnnouncementPageViewModel GetRentalAnnouncements(int page, int pageSize) { RentalAnnouncementPageDto announcements = _rentalAnnouncementService.GetPageWithFilters(page, pageSize, HttpContext.Current.Request.QueryString); RentalAnnouncementPageViewModel results = _mapper.Map <RentalAnnouncementPageViewModel>(announcements); return(results); }
public RentalAnnouncementPageDto 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 <RentalAnnouncement> announcements = _repository.GetAll(); announcements = announcements.Where(announcement => (announcement.Cost >= minCost && announcement.Cost <= maxCost) && (announcement.Area >= minArea && announcement.Area <= maxArea) && announcement.Reservations.All(reservation => ((!reservation.IsActive) && (reservation.IsConfirmed)) || ((!reservation.IsRejected) && (reservation.IsConfirmed)))); int skip = (pageNumber - 1) * pageSize; Int32 announcementCount = (int)Math.Ceiling(announcements.Count() / (float)pageSize); announcements = announcements.OrderByDescending(g => g.Id).Skip(skip).Take(pageSize); List <RentalAnnouncementDto> rentalAnnouncementDtos = _mapper.Map <IEnumerable <RentalAnnouncement>, List <RentalAnnouncementDto> >(announcements); RentalAnnouncementPageDto rentalAnnouncementPageDto = new RentalAnnouncementPageDto { CurrentPage = pageNumber, PageCount = announcementCount, RentalAnnouncements = rentalAnnouncementDtos }; return(rentalAnnouncementPageDto); }