IEnumerable <CarTechState> SortStates(IEnumerable <CarTechState> states, CarTechStateSortState sortOrder)
        {
            ViewData["StateNumber"] = sortOrder == CarTechStateSortState.StateNumberAsc ?
                                      CarTechStateSortState.StateNumberDesc : CarTechStateSortState.StateNumberAsc;
            ViewData["FullName"] = sortOrder == CarTechStateSortState.FullNameAsc ?
                                   CarTechStateSortState.FullNameDesc : CarTechStateSortState.FullNameAsc;
            ViewData["BrakeSystem"] = sortOrder == CarTechStateSortState.BrakeSystemAsc ?
                                      CarTechStateSortState.BrakeSystemDesc : CarTechStateSortState.BrakeSystemAsc;

            switch (sortOrder)
            {
            case CarTechStateSortState.StateNumberAsc:
                return(states.OrderBy(c => c.Car.StateNumber));

            case CarTechStateSortState.StateNumberDesc:
                return(states.OrderByDescending(c => c.Car.StateNumber));

            case CarTechStateSortState.FullNameAsc:
                return(states.OrderBy(c => c.Inspector.FullName));

            case CarTechStateSortState.FullNameDesc:
                return(states.OrderByDescending(c => c.Inspector.FullName));

            case CarTechStateSortState.BrakeSystemAsc:
                return(states.OrderBy(c => c.BrakeSystem));

            case CarTechStateSortState.BrakeSystemDesc:
                return(states.OrderByDescending(c => c.BrakeSystem));
            }

            return(null);
        }
        public IActionResult Index(CarTechStateSortState sortOrder = CarTechStateSortState.StateNumberAsc)
        {
            if (!HttpContext.Session.TryGet(out IEnumerable <CarTechState> states))
            {
                states = _context.CarTechStates.Include("Car").Include("Inspector").ToList();

                HttpContext.Session.Set(states);
            }

            states = SortStates(states, sortOrder);

            ViewData["StateNumbers"] = states
                                       .Select(s => new SelectListItem
            {
                Value    = s.Car.StateNumber,
                Text     = s.Car.StateNumber,
                Selected = s.Car.StateNumber == ((string)HttpContext.Items["StateNumber"] ?? "")
            })
                                       .Distinct(new SelectListItemEqualityComparer())
                                       .ToList();
            ViewData["FullNames"] = states
                                    .Select(s => new SelectListItem
            {
                Value    = s.Inspector.FullName,
                Text     = s.Inspector.FullName,
                Selected = s.Inspector.FullName == ((string)HttpContext.Items["FullName"] ?? "")
            })
                                    .Distinct(new SelectListItemEqualityComparer())
                                    .ToList();

            return(View(states));
        }
        public IActionResult Index(StateFilter filter, int page = 1, CarTechStateSortState sortOrder = CarTechStateSortState.StateNumberAsc)
        {
            if (!HttpContext.Session.TryGet(out IEnumerable <CarTechState> states, "States"))
            {
                states = _context.CarTechStates.Include("Car").Include("Inspector").ToList();

                HttpContext.Session.Set(states, "States");
            }

            states = SortStates(states, sortOrder);

            states = states
                     .Where(s => s.Car.StateNumber.StartsWith(filter.StateNumber ?? ""))
                     .Where(s => s.Inspector.FullName.StartsWith(filter.FullName ?? ""))
                     .Where(s => s.BrakeSystem.StartsWith(filter.BrakeSystem ?? ""));

            ViewData["StateNumbers"] = states
                                       .Select(s => new SelectListItem
            {
                Value    = s.Car.StateNumber,
                Text     = s.Car.StateNumber,
                Selected = s.Car.StateNumber == ((string)HttpContext.Items["StateNumber"] ?? "")
            })
                                       .Distinct(new SelectListItemEqualityComparer())
                                       .ToList();
            ViewData["FullNames"] = states
                                    .Select(s => new SelectListItem
            {
                Value    = s.Inspector.FullName,
                Text     = s.Inspector.FullName,
                Selected = s.Inspector.FullName == ((string)HttpContext.Items["FullName"] ?? "")
            })
                                    .Distinct(new SelectListItemEqualityComparer())
                                    .ToList();

            var count = states.Count();

            states = states.Skip((page - 1) * pageSize).Take(pageSize);

            ViewData["PageViewModel"] = new PageViewModel(count, page, pageSize);

            return(View(states));
        }