private ProductsListModel CreateProductList(string category, int priceFrom, int priceTo, int page) { //initialize data ProductsListModel model = new ProductsListModel(); model.Categories = new List<string>(); model.Products = new List<ProductDetailListModel>(); List<Category> categories = null; List<Product> products = null; //Loading data from DB using (InternetStoreDBContext dbc = new InternetStoreDBContext()) { categories = (from item in dbc.Categories select item).ToList(); if (category == null || category == "All") products = (from item in dbc.Products where item.Price >= priceFrom && item.Price <= priceTo select item).ToList(); else { int categ = (from item in categories where item.CategoryName == category select item).ToList().FirstOrDefault().ID; products = (from item in dbc.Products where item.Price >= priceFrom && item.Price <= priceTo && item.CategoryID == categ select item).ToList(); } } //Fill Catagory if (categories != null) foreach (Category item in categories) model.Categories.Add(item.CategoryName); //Fill Products List<ProductDetailListModel> tempProsuctDetailListModel = new List<ProductDetailListModel>(); if (categories != null && products != null) foreach (Product prod in products) { string categ = (from item in categories where item.ID == prod.CategoryID select item).ToList().FirstOrDefault().CategoryName; ProductDetailListModel productDetailModel = new ProductDetailListModel( prod.ID, prod.ProductName, prod.Description, prod.Image, categ, prod.Quantity, prod.Price); tempProsuctDetailListModel.Add(productDetailModel); } //Determine list of Products in one Page int ProductsOnPage = 6; int CurrentPage = page; int TotalPages = 0; List<ProductDetailListModel> ProsuctDetailListModelToView = new List<ProductDetailListModel>(); if (tempProsuctDetailListModel.Count > 0) { tempProsuctDetailListModel.Sort(delegate(ProductDetailListModel m1, ProductDetailListModel m2) { return m1.ProductName.CompareTo(m2.ProductName); }); double TotalPagesDouble = (double)(tempProsuctDetailListModel.Count) / (double)ProductsOnPage; if ((TotalPagesDouble - Math.Truncate(TotalPagesDouble)) == 0 || TotalPagesDouble < 1) TotalPages = Convert.ToInt32(TotalPagesDouble); else TotalPages = (int)(Math.Truncate(TotalPagesDouble)) + 1; int startElement = (CurrentPage - 1) * ProductsOnPage; int endElement = CurrentPage * ProductsOnPage - 1; if (startElement > (tempProsuctDetailListModel.Count - 1)) { startElement = 0; endElement = ProductsOnPage; } if (endElement > (tempProsuctDetailListModel.Count - 1)) endElement = tempProsuctDetailListModel.Count - 1; for (int i = startElement; i <= endElement; i++) ProsuctDetailListModelToView.Add(tempProsuctDetailListModel[i]); } //Create model for View model.Page = CurrentPage; model.CountOfPages = TotalPages; model.PriceFrom = priceFrom; model.PriceTo = priceTo; model.SelectedCategory = category; model.Products = ProsuctDetailListModelToView; return model; }
public ActionResult ProductDetailList(int id) { Product product; ProductDetailListModel model = null; using (InternetStoreDBContext dbc = new InternetStoreDBContext()) { product = (from item in dbc.Products where item.ID == id select item).ToList().FirstOrDefault(); if (product != null) { string category = (from item in dbc.Categories where item.ID == product.CategoryID select item).ToList().FirstOrDefault().CategoryName; model = new ProductDetailListModel( product.ID, product.ProductName, product.Description, product.Image, category, product.Quantity, product.Price); } } if (model == null) return RedirectToAction("Index"); return View(model); }