public async Task <IActionResult> Index(int?category, string name, string priceRange, int page = 1, SortState sortOrder = SortState.NameAsc) { IQueryable <Cap> caps = db.Caps .Include(x => x.Category) .Include(x => x.Supplier) .AsNoTracking(); decimal maxPrice = caps.Max(p => p.Price); decimal minPrice = caps.Min(p => p.Price); caps = caps.Where(p => (p.Visible == true)); ViewData["CurrentRange"] = priceRange; ViewData["CurrentName"] = name; ViewData["CurrentCategory"] = category; ViewData["CurrentSort"] = sortOrder; if (!String.IsNullOrEmpty(priceRange)) { //Get ints from string priceRange string[] s = priceRange.Split(','); int minRange = Convert.ToInt32(s[0]); int maxRange = Convert.ToInt32(s[1]); caps = caps.Where(p => (p.Price >= minRange && p.Price <= maxRange)); } if (category != null && category != 0) { caps = caps.Where(p => p.CategoryId == category); } if (!String.IsNullOrEmpty(name)) { caps = caps.Where(p => p.Name.Contains(name)); } List <Category> categories = db.Categories.ToList(); // set the first element which allow to select all categories.Insert(0, new Category { Name = "All", Id = 0 }); ViewData["NameSort"] = sortOrder == SortState.NameAsc ? SortState.NameDesc : SortState.NameAsc; ViewData["PriceSort"] = sortOrder == SortState.PriceAsc ? SortState.PriceDesc : SortState.PriceAsc; ViewData["CatSort"] = sortOrder == SortState.CategoryAsc ? SortState.CategoryDesc : SortState.CategoryAsc; switch (sortOrder) { case SortState.NameDesc: caps = caps.OrderByDescending(s => s.Name); break; case SortState.PriceAsc: caps = caps.OrderBy(s => s.Price); break; case SortState.PriceDesc: caps = caps.OrderByDescending(s => s.Price); break; case SortState.SupplierAsc: caps = caps.OrderBy(s => s.Supplier.Name); break; case SortState.SupplierDesc: caps = caps.OrderByDescending(s => s.Supplier.Name); break; case SortState.CategoryAsc: caps = caps.OrderBy(s => s.Category.Name); break; case SortState.CategoryDesc: caps = caps.OrderByDescending(s => s.Category.Name); break; default: caps = caps.OrderBy(s => s.Name); break; } int pageSize = 9; // elements per page var count = await caps.CountAsync(); var items = await caps.Skip((page - 1) *pageSize).Take(pageSize).ToListAsync(); PageViewModel pageViewModel = new PageViewModel(count, page, pageSize); CapsListViewModel viewModel = new CapsListViewModel { Caps = items.ToList(), Categories = new SelectList(categories, "Id", "Name"), PageViewModel = pageViewModel, Name = name, MaxPrice = maxPrice, MinPrice = minPrice }; return(View(viewModel)); }
public async Task <IActionResult> Index(int?category, int?supplier, string name, int page = 1, SortState sortOrder = SortState.NameAsc) { IQueryable <Cap> caps = db.Caps .Include(x => x.Category) .Include(x => x.Supplier) .AsNoTracking(); ViewData["CurrentName"] = name; ViewData["CurrentCategory"] = category; ViewData["CurrentSupplier"] = supplier; ViewData["CurrentSort"] = sortOrder; if (category != null && category != 0) { caps = caps.Where(p => p.CategoryId == category); } if (supplier != null && supplier != 0) { caps = caps.Where(p => p.SupplierId == supplier); } if (!String.IsNullOrEmpty(name)) { caps = caps.Where(p => p.Name.Contains(name)); } List <Category> categories = db.Categories.ToList(); List <Supplier> suppliers = db.Suppliers.ToList(); // set the first element which allow to select all categories.Insert(0, new Category { Name = "All", Id = 0 }); suppliers.Insert(0, new Supplier { Name = "All", Id = 0 }); ViewData["NameSort"] = sortOrder == SortState.NameAsc ? SortState.NameDesc : SortState.NameAsc; ViewData["PriceSort"] = sortOrder == SortState.PriceAsc ? SortState.PriceDesc : SortState.PriceAsc; ViewData["CatSort"] = sortOrder == SortState.CategoryAsc ? SortState.CategoryDesc : SortState.CategoryAsc; ViewData["SupSort"] = sortOrder == SortState.SupplierAsc ? SortState.SupplierDesc : SortState.SupplierAsc; switch (sortOrder) { case SortState.NameDesc: caps = caps.OrderByDescending(s => s.Name); break; case SortState.PriceAsc: caps = caps.OrderBy(s => s.Price); break; case SortState.PriceDesc: caps = caps.OrderByDescending(s => s.Price); break; case SortState.SupplierAsc: caps = caps.OrderBy(s => s.Supplier.Name); break; case SortState.SupplierDesc: caps = caps.OrderByDescending(s => s.Supplier.Name); break; case SortState.CategoryAsc: caps = caps.OrderBy(s => s.Category.Name); break; case SortState.CategoryDesc: caps = caps.OrderByDescending(s => s.Category.Name); break; default: caps = caps.OrderBy(s => s.Name); break; } int pageSize = 10; // elements per page var count = await caps.CountAsync(); var items = await caps.Skip((page - 1) *pageSize).Take(pageSize).ToListAsync(); PageViewModel pageViewModel = new PageViewModel(count, page, pageSize); CapsListViewModel viewModel = new CapsListViewModel { Caps = items.ToList(), Categories = new SelectList(categories, "Id", "Name"), Suppliers = new SelectList(suppliers, "Id", "Name"), PageViewModel = pageViewModel, Name = name }; return(View(viewModel)); }