public ActionResult Details(int id, string carSortOrder, string carSearchString, string inspectionSortOrder, string inspectionSearchString) { var userModel = new UserViewModel(_userService.GetUser(id)); var carsModel = new List <CarViewModel>(); var inspectionsModel = new List <InspectionViewModel>(); var carList = _carService.GetCarsForUser(userModel.Id); var inspectionList = _inspectionService.GetInspectionsForUser(userModel.Id); foreach (var car in carList) { var model = new CarViewModel(car); carsModel.Add(model); } ViewBag.CarSortOrder = carSortOrder; ViewBag.CarIdSortParm = String.IsNullOrEmpty(carSortOrder) ? "Id_desc" : ""; ViewBag.CarMakeSortParm = carSortOrder == "Make" ? "Make_desc" : "Make"; ViewBag.CarModelSortParm = carSortOrder == "Model" ? "Model_desc" : "Model"; ViewBag.CarRegistrationNumberSortParm = carSortOrder == "RegistrationNumber" ? "RegistrationNumber_desc" : "RegistrationNumber"; var cars = from car in carsModel select car; if (!String.IsNullOrEmpty(carSearchString)) { cars = cars.Where(car => car.Id.ToString().Contains(carSearchString) || car.Make.Contains(carSearchString) || car.Model.Contains(carSearchString) || car.RegistrationNumber.Contains(carSearchString)); } switch (carSortOrder) { case "Id_desc": cars = cars.OrderByDescending(car => car.Id); break; case "Make": cars = cars.OrderBy(car => car.Make); break; case "Make_desc": cars = cars.OrderByDescending(car => car.Make); break; case "Model": cars = cars.OrderBy(car => car.Model); break; case "Model_desc": cars = cars.OrderByDescending(car => car.Model); break; case "RegistrationNumber": cars = cars.OrderBy(car => car.RegistrationNumber); break; case "RegistrationNumber_desc": cars = cars.OrderByDescending(car => car.RegistrationNumber); break; default: cars = cars.OrderBy(car => car.Id); break; } foreach (var inspection in inspectionList) { var model = new InspectionViewModel(inspection, id); inspectionsModel.Add(model); } ViewBag.InspectionSortOrder = inspectionSortOrder; ViewBag.InspectionCarIdSortParm = String.IsNullOrEmpty(inspectionSortOrder) ? "CarId_desc" : ""; ViewBag.InspectionInspectionDateSortParm = inspectionSortOrder == "InspectionDate" ? "InspectionDate_desc" : "InspectionDate"; ViewBag.InspectionCommentsSortParm = inspectionSortOrder == "Comments" ? "Comments_desc" : "Comments"; ViewBag.InspectionNextInspectionYearsSortParm = inspectionSortOrder == "NextInspectionYears" ? "NextInspectionYears_desc" : "NextInspectionYears"; var inspections = from inspection in inspectionsModel select inspection; if (!String.IsNullOrEmpty(inspectionSearchString)) { inspections = inspections.Where(inspection => inspection.CarId.ToString().Contains(inspectionSearchString) || (inspection.InspectionDate != null && inspection.InspectionDate.ToString().Contains(inspectionSearchString)) || (inspection.Comments != null && inspection.Comments.Contains(inspectionSearchString)) || inspection.NextInspectionYears.ToString().Contains(inspectionSearchString)); } switch (inspectionSortOrder) { case "CarId_desc": inspections = inspections.OrderByDescending(inspection => inspection.CarId); break; case "InspectionDate": inspections = inspections.OrderBy(inspection => inspection.InspectionDate); break; case "InspectionDate_desc": inspections = inspections.OrderByDescending(inspection => inspection.InspectionDate); break; case "Comments": inspections = inspections.OrderBy(inspection => inspection.Comments); break; case "Comments_desc": inspections = inspections.OrderByDescending(inspection => inspection.Comments); break; case "NextInspectionYears": inspections = inspections.OrderBy(inspection => inspection.NextInspectionYears); break; case "NextInspectionYears_desc": inspections = inspections.OrderByDescending(inspection => inspection.NextInspectionYears); break; default: inspections = inspections.OrderBy(inspection => inspection.CarId); break; } var userWithCarViewModel = new UserWithCarViewModel() { User = userModel, Cars = cars.ToList(), Inspections = inspections.ToList() }; return(View(userWithCarViewModel)); }