public ActionResult Index(RentalFilters rentalFilters) { var rentals = FilterRentals(rentalFilters); RentalsList rentalsList = new RentalsList { Rentals = rentals, Filters = rentalFilters }; return(View(rentalsList)); }
// filteration using linq private IMongoQueryable <Rental> FilterRentalsLINQ(RentalFilters filters) { var rentals = context.Rentals.AsQueryable(); if (filters.MinimumRoom.HasValue) { rentals = rentals .Where(r => r.NumberOfRooms >= filters.MinimumRoom); } if (filters.PriceLimit.HasValue) { rentals = rentals .Where(r => r.Price <= filters.PriceLimit); } return(rentals); }
// filteration method to filter rentals private List <Rental> FilterRentals(RentalFilters rentalFilters) { if (rentalFilters.PriceLimit.HasValue && rentalFilters.MinimumRoom.HasValue) { var filter = Builders <Rental> .Filter.Where(u => u.NumberOfRooms > rentalFilters.MinimumRoom && u.Price <= rentalFilters.PriceLimit); return(context.Rentals.Find(filter).SortBy(u => u.Price).ToList()); } if (rentalFilters.MinimumRoom.HasValue) { return(context.Rentals.AsQueryable().Where(u => u.NumberOfRooms >= rentalFilters.MinimumRoom).OrderBy(u => u.NumberOfRooms).ToList()); } if (rentalFilters.PriceLimit.HasValue) { var filter = Builders <Rental> .Filter.Lte(s => s.Price, rentalFilters.PriceLimit); return(context.Rentals.Find(filter).SortBy(u => u.Price).ToList()); } return(context.Rentals.Find(FilterDefinition <Rental> .Empty).SortBy(u => u.Price).ToList()); }
public ObjectResponse <List <RentalDTO> > GetRentals(RentalFilters rentalFilters) { try { var response = _unitOfWork.RentalsRepository.GetAll().Include(x => x.copy).Include(x => x.copy.movy).Include(y => y.client); if (rentalFilters.ClientId.HasValue) { response = response.Where(x => x.client_id == rentalFilters.ClientId.Value); } if (rentalFilters.RentalDateFrom.HasValue) { var datefrom = rentalFilters.RentalDateFrom.Value.Date; response = response.Where(x => x.date_of_rental.Value.CompareTo(datefrom) >= 0); } if (rentalFilters.RentalDateTo.HasValue) { var dateTo = rentalFilters.RentalDateTo.Value.Date.AddDays(1); response = response.Where(x => x.date_of_rental.Value.CompareTo(dateTo) < 0); } if (rentalFilters.DaysOverDue > 0) { response = response.Where(x => DbFunctions.DiffDays(x.date_of_rental.Value, DateTime.Now) >= rentalFilters.DaysOverDue && !x.date_of_return.HasValue); } return(new ObjectResponse <List <RentalDTO> > { Success = true, Data = response.ToList()?.Select(x => RentalDTO.Create(x))?.ToList() }); } catch (Exception ex) { return(new ObjectResponse <List <RentalDTO> > { Success = false, Error = ex.GetBaseException().Message, Info = DB_GET_ERROR }); } }
public async Task <ActionResult> IndexProjection(RentalFilters filters) { var rentals = await FilterRentalsLINQ(filters) .Select(r => new RentalViewModel { Id = r.Id, Address = r.Address, Description = r.Description, NumberOfRooms = r.NumberOfRooms, Price = r.Price }) .OrderBy(r => r.Price) .ThenByDescending(r => r.NumberOfRooms) .ToListAsync(); var model = new RentalsList { RentalsVM = rentals, Filters = filters }; return(View("Index", model)); }