public ProductsSortViewModel(ProductsSortState sortOrder) { IdSort = sortOrder == ProductsSortState.IdAsc ? ProductsSortState.IdDesc : ProductsSortState.IdAsc; NameSort = sortOrder == ProductsSortState.NameAsc ? ProductsSortState.NameDesc : ProductsSortState.NameAsc; ProducerSort = sortOrder == ProductsSortState.ProducerAsc ? ProductsSortState.ProducerDesc : ProductsSortState.ProducerAsc; PriceSort = sortOrder == ProductsSortState.PriceAsc ? ProductsSortState.PriceDesc : ProductsSortState.PriceAsc; Current = sortOrder; }
public IActionResult Index(string searchString, string category = "All", int page = 1, ProductsSortState sortOrder = ProductsSortState.IdAsc) { if (!User.IsInRole("Administrator")) { ViewData["SortOrders"] = Enum.GetValues(typeof(ProductsSortState)).Cast <ProductsSortState>().Select(v => new SelectListItem { Text = v.ToString(), Value = v.ToString() }).ToList(); } var products = _productRepository.GetAll(); var categories = _categoryRepository.GetAll(); List <SelectListItem> selectListCategories = new List <SelectListItem>( categories.Select(n => new SelectListItem { Value = n.Name, Text = n.Name })); selectListCategories.Insert(0, new SelectListItem("All", "All")); if (!string.IsNullOrEmpty(category) && category != "All") { var categoryFilter = categories.FirstOrDefault(n => n.Name == category); products = products.Where(n => n.CategoryId == categoryFilter.Id).ToList(); selectListCategories.FirstOrDefault(n => n.Text == category).Selected = true; } if (!string.IsNullOrEmpty(searchString)) { products = products.Where(n => n.Name.ToLower().Contains(searchString.ToLower())).ToList(); } List <Product> sortProducts = (sortOrder switch { ProductsSortState.IdDesc => products.OrderByDescending(n => n.Id), ProductsSortState.NameAsc => products.OrderBy(n => n.Name), ProductsSortState.NameDesc => products.OrderByDescending(n => n.Name), ProductsSortState.ProducerAsc => products.OrderBy(n => n.Producer), ProductsSortState.ProducerDesc => products.OrderByDescending(n => n.Producer), ProductsSortState.PriceAsc => products.OrderBy(n => n.Price), ProductsSortState.PriceDesc => products.OrderByDescending(n => n.Price), _ => products.OrderBy(n => n.Id), }).ToList();