/// <summary> /// 商品小类筛选页面 GoodsTypeName ----------------SelectGoods--商品筛选 --图文 /// Home/SelectGoods /// </summary> /// <param name="id"></param> /// <returns></returns> public ActionResult selectgoods(int id = 0, string pvlueIDs = null) { ViewBag.ReturnUrl = Request.Url; #region -------------SelectGoods 商品筛选 --图文 if (id == 0)//商品小类ID为空 { return HttpNotFound(); } else //商品小类ID不为空 { if (id != 0 && pvlueIDs == null)//商品小类ID不等于0, 商品属性不为空 { #region -------------首次请求 var vbv = from f in db.GoodsPropertys where f.GoodsType.GoodsTypeID == id orderby f.GoodsPropertyID select f; int sproCout = vbv.ToList().Count; GoodsProperty[] sfArray = new GoodsProperty[sproCout]; for (int i = 0; i < sproCout; i++) { sfArray[i] = new GoodsProperty(); sfArray[i].GoodsPropertyID = 0;//盒子 } GoodsType slg = db.GoodsTypes.Find(id);//转换 SKUtypebrandgoods sbg = new SKUtypebrandgoods(); sbg.SmallType = slg;//商品小类 #region -------------Linq GoodsType middleType = db.GoodsTypes//商品中类 .Where(f => f.GoodsTypeID == id) .Select(f => f.GoodsTypes) .ToArray()[0]; sbg.BigType = db.GoodsTypes//商品大类 .Where(f => f.GoodsTypeID == middleType.GoodsTypeID) .Select(f => f.GoodsTypes) .ToArray()[0]; sbg.GoodsBrandLst = db.Goodss//商品品牌 .Where(f => f.GoodsTypeID == slg.GoodsTypeID) .Select(f => f.GoodsBrand) .Distinct() .ToList(); sbg.GoodsProertyLst = db.GoodsPropertys//商品属性 .Where(f => f.GoodsType.GoodsTypeID == id) .Select(f => f) .ToList(); sbg.GoodsPropertyValueLst = db.GoodsPropertyValues.ToList();//所有商品属性值 sbg.Goodses = db.Goodss//商品 .Where(f => f.GoodsTypeID == id) .Select(f => f) .ToList(); #endregion sbg.GproArray = sfArray;//商品属性数组 #region -------------取模分页 sbg.BrandID = 0; sbg.shelvesTimeArray = new string[3]; sbg.shelvesTimeArray[0] = "0";//Url倒数第三位(所有商品排序)0:按上架时间降序,1:按上架时间升序,2:按价格升序,3:按价格降序,4:按好评,5:按销量; sbg.shelvesTimeArray[1] = "0";//Url倒数第二位(商品仅显示有货)0:显示全部,1:仅显示有货; sbg.shelvesTimeArray[2] = "1";//Url倒数第一位(商品分页)【所传过来的分页】 sbg.Goodses = sbg.Goodses .Where(s => s.GoodsSKUs.Count > 0) .OrderByDescending(f => f.GoodsAddTime) .Select(f => f) .ToList();//排序(只显示有goodsSku的商品) int page = sbg.Goodses.Count; if (page % 24 == 0)//取模分页 { page = page / 24; } else { page = (page / 24) + 1; } sbg.page = page;//商品有多少页 sbg.Goodses = sbg.Goodses.Skip(0).Take(24).ToList(); #endregion return View(sbg); #endregion } else//都不为空 { #region -------------二次请求---商品 GoodsType gds = db.GoodsTypes.Find(id);//转换 string[] strs = pvlueIDs.Split('-');//截断字符串 string[] str = strs.Take(1).ToArray();//品牌ID string[] strPro = strs.Skip(1).Take(strs.Length - 4).ToArray();//从第二个到倒数第四个截断的字符串数组(包括倒数第四个) SKUtypebrandgoods sku = new SKUtypebrandgoods();//中间表 sku.shelvesTimeArray = strs.Skip(strs.Length - 3).Take(3).ToArray();//Url后三位截断字符串赋值 sku.BrandID = Int32.Parse(str[0]);//品牌ID sku.GoodsBrandLst = db.Goodss//商品品牌 .Where(f => f.GoodsTypeID == gds.GoodsTypeID) .Select(f => f.GoodsBrand) .Distinct() .ToList(); var pro = from f in db.GoodsPropertys where f.GoodsType.GoodsTypeID == id select f; int ig = pro.ToList().Count; GoodsProperty[] pros = new GoodsProperty[ig]; for (int i = 0; i < ig; i++) { pros[i] = new GoodsProperty(); pros[i].GoodsPropertyID = int.Parse(strPro[i]); } sku.GproArray = pros; #region -------------商品Linq语句 sku.SmallType = gds; GoodsType middleType = db.GoodsTypes//商品中类 .Where(f => f.GoodsTypeID == id) .Select(f => f.GoodsTypes) .ToArray()[0]; sku.BigType = db.GoodsTypes//商品大类 .Where(f => f.GoodsTypeID == middleType.GoodsTypeID) .Select(f => f.GoodsTypes) .ToArray()[0]; sku.GoodsProertyLst = db.GoodsPropertys//商品属性 .Where(f => f.GoodsType.GoodsTypeID == id) .Select(f => f) .ToList(); sku.GoodsPropertyValueLst = db.GoodsPropertyValues.ToList();//所有商品属性值 #endregion var goodslst = db.Goodss//商品类别全部商品 .Where(f => f.GoodsTypeID == id) .Select(f => f); #region -------------商品属性值筛选 if (sku.BrandID > 0) { goodslst = goodslst .Where(f => f.GoodsBrandID == sku.BrandID) .Select(f => f); } foreach(var v in strPro) { if (v == "0") { continue;//继续 } else { int propertyValueID = int.Parse(v); var pvgs = db.PropertyValueGoods .Where(f => f.GoodsPropertyValueID == propertyValueID) .Select(f => f); goodslst = from f in goodslst join s in pvgs on f.GoodsID equals s.GoodsID select f; } } sku.Goodses = goodslst.Where(s => s.GoodsSKUs.Count > 0).Distinct().ToList(); #endregion #region -------------商品排序筛选 if (sku.shelvesTimeArray[0] == "0")//Url倒数第三位(所有商品排序)0:按上架时间降序,1:按上架时间升序,2:按价格升序,3:按价格降序,4:按好评,5:按销量; { sku.Goodses = goodslst.OrderByDescending(f => f.GoodsAddTime).ToList(); } else if(sku.shelvesTimeArray[0] == "1") { sku.Goodses = goodslst.OrderBy(f => f.GoodsAddTime).ToList(); } else if (sku.shelvesTimeArray[0] == "2") { sku.Goodses = sku.Goodses .OrderBy(f => f.GoodsSKUs.OrderBy (fs => fs.GoodsNormalPrice) .Select(fs => fs).ToArray()[0] .GoodsNormalPrice) .Select(f => f) .ToList(); } else if (sku.shelvesTimeArray[0] == "3") { sku.Goodses = sku.Goodses .OrderByDescending(f => f.GoodsSKUs.OrderBy (fs => fs.GoodsNormalPrice) .Select(fs => fs).ToArray()[0] .GoodsNormalPrice) .Select(f => f) .ToList(); } else if (sku.shelvesTimeArray[0] == "4")//好评度 { } else if (sku.shelvesTimeArray[0] == "5") { } else { return HttpNotFound(); } #endregion #region -------------是否仅显示有货的商品 if (sku.shelvesTimeArray[1] == "0")//Url倒数第二位(商品仅显示有货)0:显示全部,1:仅显示有货; { } else if (sku.shelvesTimeArray[1] == "1") { //商品库存数量 != Null sku.Goodses = sku.Goodses .Where(f => f.GoodsSKUs.Where(fs => fs.GoodsQty > 0).Select(fs => fs).ToList().Count > 0) .Select(f => f) .ToList(); } #endregion #region -------------商品分页 int page; if (sku.Goodses.Count % 24 == 0) { page = sku.Goodses.Count / 24; } else { page = (sku.Goodses.Count / 24) + 1; } sku.page = page; int currentPage = 1; string pageStr = sku.shelvesTimeArray[2]; bool parseOk = int.TryParse(pageStr,out currentPage); if(currentPage - 1 <= 0) { sku.Goodses = sku.Goodses.Take(24).ToList();//表示第一页 } else { sku.Goodses = sku.Goodses.Skip((currentPage - 1)*24).Take(24).ToList();//商品分页当前页 } #endregion return View(sku); #endregion } } #endregion }