public PagingModel(int numberOfItems, int page, int resultsPerPage, SearchFiltersModel searchFilters, SortingFiltersModel sortFilters) { NumberOfItems = numberOfItems; if (page == 0) { Page = 1; } else { Page = page; } switch (resultsPerPage) { case 8: ResultsPerPage = resultsPerPage; break; case 16: ResultsPerPage = resultsPerPage; break; case 24: ResultsPerPage = resultsPerPage; break; default: ResultsPerPage = 8; break; } SearchFilters = searchFilters; SortFilters = sortFilters; CalculateParameters(); }
public void Urls(SearchFiltersModel searchFilters, PagingModel paging, SortingFiltersModel sorting) { var url = ""; for (var i = 1; i <= Filters.Count(); i++) { //default to search url url = Globals.SearchUrl; //add category filter url += "?categoryID=" + searchFilters.CategoryFilters.Id; //set price filter when not selected if (searchFilters.PriceFilters.Id != i) { url = url + "&priceID=" + i; } //add humidor size filter if (Filters[i].Name == "Humidors" && searchFilters.HumidorSizeFilters.Id != 0) { url += "&humidorSizeID=" + searchFilters.HumidorSizeFilters.Id; } //add paging filters url += "&" + paging.PagingFilters; //add sorting filters url += "&sortID=" + sorting.Id; //set url Filters[i].Url = url; } }
public SearchViewModel Search() { //category filters var categoryFilters = new CategoryFiltersModel(CategoryID); //price filters var priceFilters = new PriceFiltersModel(PriceID); //humidor size filters var humidorSizeFilters = new HumidorSizeFiltersModel(HumidorSizeID); //color filters var colorFilters = new ColorFiltersModel(ColorID); //sorting filters var sortingFilters = new SortingFiltersModel(SortID); //all search filters var searchFilters = new SearchFiltersModel(categoryFilters, priceFilters, humidorSizeFilters, colorFilters); //category counts categoryFilters.Counts(searchFilters); //price counts priceFilters.Counts(searchFilters); //humidor size counts if (categoryFilters.Name == "Humidors") { humidorSizeFilters.Counts(searchFilters); } //color counts if (categoryFilters.Name == "Lighters") { colorFilters.Counts(searchFilters); } //number of items var numberOfItems = categoryFilters.Filters[categoryFilters.Id].Count; //paging var paging = new PagingModel(numberOfItems, Page, ResultsPerPage, searchFilters, sortingFilters); //category filter urls categoryFilters.Urls(searchFilters, paging, sortingFilters); //price filter urls priceFilters.Urls(searchFilters, paging, sortingFilters); //humidor size filter urls humidorSizeFilters.Urls(searchFilters, paging, sortingFilters); //color filter urls colorFilters.Urls(searchFilters, paging, sortingFilters); //sorting urls sortingFilters.Urls(searchFilters, paging); //search IQueryable <ItemModel> items = SearchResults(searchFilters, paging, sortingFilters); //view model var model = new SearchViewModel(items, paging, searchFilters, sortingFilters); return(model); }
public IQueryable <ItemModel> SearchResults(SearchFiltersModel searchFilters, PagingModel paging, SortingFiltersModel sorting) { //in case page requested is higher than existing number of pages var page = paging.Page; //skip calculation int skip = paging.ResultsPerPage * (page - 1); IQueryable <ItemModel> items; //filter by humidor size if (searchFilters.CategoryFilters.Name == "Humidors" && searchFilters.HumidorSizeFilters.Id != 0) { items = itemRepository.AsItemModelByHumidorSize(searchFilters.HumidorSizeFilters.EqualityValue); } //filter by color else if (searchFilters.CategoryFilters.Name == "Lighters" && searchFilters.ColorFilters.Id != 0) { items = itemRepository.AsItemModelByColor(searchFilters.ColorFilters.EqualityValue); } //search items else { //IQueryable<ItemModel> items = itemRepository.AsItemModel(); items = itemRepository.AsItemModel(); } //filter by category items = itemRepository.ByCategory(items, searchFilters.CategoryFilters.EqualityValue); //filter by price if (searchFilters.PriceFilters.Id != 0) { items = itemRepository.ByPrice(items, searchFilters.PriceFilters.Min, searchFilters.PriceFilters.Max); } //order by switch (sorting.EqualityValue) { case "priceAsc": items = items.OrderBy(r => r.Price).ThenBy(r => r.Name); break; case "priceDesc": items = items.OrderByDescending(r => r.Price).ThenBy(r => r.Name); break; case "nameAsc": items = items.OrderBy(r => r.Name).ThenBy(r => r.Price); break; case "nameDesc": items = items.OrderByDescending(r => r.Name).ThenBy(r => r.Price); break; default: items = items.OrderByDescending(r => r.VoteCount).ThenBy(r => r.Name); break; } //skip, take items = items.Skip(skip).Take(paging.ResultsPerPage); return(items); }