public async Task <PagedResult <ReservationListHeader> > GetReservations(ReservationListFilter filter, int?userid) { if (filter == null) { filter = new ReservationListFilter(); } if (filter?.PageSize < 0) { filter.PageSize = null; } if (filter?.PageNumber < 0) { filter.PageNumber = null; } IQueryable <Reservation> reservations = _dbContext.Reservations .Include(c => c.VehicleModel) .Include(c => c.Car) .Include(c => c.Address) .Include(c => c.User); reservations = reservations.Where(r => r.UserId == userid); switch (filter.reservationOrder) { case ReservationOrder.AddressAscending: reservations = reservations.OrderBy(r => r.Address.ZipCode).OrderBy(r => r.Address.City).OrderBy(r => r.Address.StreetAddress); break; case ReservationOrder.AddressDescending: reservations = reservations.OrderByDescending(r => r.Address.ZipCode).OrderByDescending(r => r.Address.City).OrderByDescending(r => r.Address.StreetAddress); break; case ReservationOrder.PickUpAscending: reservations = reservations.OrderBy(r => r.PickUpTime); break; case ReservationOrder.PickUpDescending: reservations = reservations.OrderByDescending(r => r.PickUpTime); break; case ReservationOrder.DropOffAscending: reservations = reservations.OrderBy(r => r.DropOffTime); break; case ReservationOrder.DropOffDescending: reservations = reservations.OrderByDescending(r => r.DropOffTime); break; case ReservationOrder.VehicleModelAscending: reservations = reservations.OrderBy(r => r.VehicleModel.VehicleType); break; case ReservationOrder.VehicleModelDescending: reservations = reservations.OrderByDescending(r => r.VehicleModel.VehicleType); break; case ReservationOrder.StateAscending: reservations = reservations.OrderBy(r => r.State); break; case ReservationOrder.StateDescending: reservations = reservations.OrderByDescending(r => r.State); break; case ReservationOrder.PriceAscending: reservations = reservations.OrderBy(r => r.Price); break; case ReservationOrder.PriceDescending: reservations = reservations.OrderByDescending(r => r.Price); break; default: break; } int?Total = null; if (((filter?.PageSize) ?? 0) != 0) { filter.PageNumber = filter.PageNumber ?? 0; Total = reservations.Count(); reservations = reservations.Skip(filter.PageNumber.Value * filter.PageSize.Value).Take(filter.PageSize.Value); } var results = await reservations.Select(ReservationListHeaderSelector).ToListAsync(); return(new PagedResult <ReservationListHeader> { Total = Total, PageNumber = filter?.PageNumber, PageSize = filter?.PageSize, Results = results }); }
public async Task OnGetAsync(string sortOrder, int?pageNumber) { ReservationListFilter filter = new ReservationListFilter(); User user = await _userManager.GetUserAsync(HttpContext.User); if (user == null) { NotFound(); } CurrentSort = sortOrder; PickUpSort = string.IsNullOrEmpty(sortOrder) ? "pickup_desc" : ""; DropOffSort = sortOrder == "DropOff" ? "dropoff_desc" : "DropOff"; AddressSort = sortOrder == "Address" ? "address_desc" : "Address"; VehicleModelSort = sortOrder == "VehicleModel" ? "vehiclemodel_desc" : "VehicleModel"; StateSort = sortOrder == "State" ? "state_desc" : "State"; PriceSort = sortOrder == "Price" ? "price_desc" : "Price"; filter.PageNumber = pageNumber ?? 0; switch (sortOrder) { case "pickup_desc": filter.reservationOrder = ReservationOrder.PickUpDescending; break; case "dropoff_desc": filter.reservationOrder = ReservationOrder.DropOffDescending; break; case "DropOff": filter.reservationOrder = ReservationOrder.DropOffAscending; break; case "address_desc": filter.reservationOrder = ReservationOrder.AddressDescending; break; case "Address": filter.reservationOrder = ReservationOrder.AddressAscending; break; case "VehicleModel": filter.reservationOrder = ReservationOrder.VehicleModelAscending; break; case "vehiclemodel_desc": filter.reservationOrder = ReservationOrder.VehicleModelDescending; break; case "State": filter.reservationOrder = ReservationOrder.StateAscending; break; case "state_desc": filter.reservationOrder = ReservationOrder.StateDescending; break; case "Price": filter.reservationOrder = ReservationOrder.PriceAscending; break; case "price_desc": filter.reservationOrder = ReservationOrder.PriceDescending; break; default: filter.reservationOrder = ReservationOrder.PickUpAscending; break; } _logger.LogInformation(LoggingEvents.ListItems, "List Reservation"); Reservation = await _reservationService.GetReservations(filter, user.Id); }