private IEnumerable <string> listOfGearTypes()
        {
            IEnumerable <WinterGear> gearItems;

            using (WinterGearRepository gearRepository = new WinterGearRepository(_dataSettings))
            {
                gearItems = gearRepository.SelectAll() as IList <WinterGear>;
            }

            IEnumerable <string> gearTypes = gearItems.Select(gearItem => gearItem.GearType).Distinct().OrderBy(gt => gt);

            return(gearTypes);
        }
        public ActionResult Index(SearchViewModel searchModel)
        {
            WinterGearRepository gearRepository = new WinterGearRepository(_dataSettings);

            IEnumerable <WinterGear> gearItems;

            using (gearRepository)
            {
                gearItems = gearRepository.SelectAll() as IList <WinterGear>;
            }

            if (!string.IsNullOrWhiteSpace(searchModel.SearchCriteria))
            {
                gearItems = gearItems.Where(item => item.Name.ToUpper().Contains(searchModel.SearchCriteria.ToUpper()));
            }

            if (!string.IsNullOrWhiteSpace(searchModel.GearTypeFilter))
            {
                gearItems = gearItems.Where(item => item.GearType == searchModel.GearTypeFilter);
            }

            switch (searchModel.SortOrder)
            {
            case "name":
                // order names ascending
                gearItems = gearItems.OrderBy(i => i.Name);
                break;

            case "condition":
                // order condition descending
                gearItems = gearItems.OrderByDescending(i => i.Condition);
                break;

            case "weight":
                // order weight ascending
                gearItems = gearItems.OrderBy(i => i.Weight);
                break;

            case "gearType":
                // order gearType ascending
                gearItems = gearItems.OrderBy(i => i.GearType);
                break;

            default:
                // order id ascending
                gearItems = gearItems.OrderBy(i => i.Id);
                break;
            }

            if (searchModel.FlipOrder)
            {
                gearItems = gearItems.Reverse();
            }

            int pageNumber = (searchModel.PageNumber ?? 1);

            int itemsPerPage = (searchModel.PageSize ?? 10);

            IPaginator <WinterGear> paginator = new Paginator <WinterGear>(gearItems, itemsPerPage, pageNumber);

            ViewBag.paginator = paginator;

            ViewBag.sortOrder      = searchModel.SortOrder;
            ViewBag.flipOrder      = searchModel.FlipOrder;
            ViewBag.gearTypes      = listOfGearTypes();
            ViewBag.gearTypeFilter = searchModel.GearTypeFilter;
            ViewBag.searchCriteria = searchModel.SearchCriteria;
            ViewBag.isSearch       = true;

            return(View(paginator.GetItems()));
        }