public IEnumerable<CommodityListDto> SearchCommodity([FromServices]ICommodityService CommodityService, [FromBody]string parameter, int tagId, CommodityStatus status) { return CommodityService.SerachCommodity(parameter,tagId,status); }
/// <summary> /// 搜索商品 /// </summary> /// <param name="parameter">搜索框参数</param> /// <param name="tagId">标签id</param> /// <param name="status">上架状态id</param> /// <returns></returns> public IEnumerable <CommodityListDto> SerachCommodity(string parameter, int tagId, CommodityStatus status) { //找到标签id对应的商品id var commodityId = _db.CommodityToTagRepos.Where(c => c.TagId == tagId).Select(c => c.CommodityId).ToList(); //定义where语句内部条件值 Func <CommodityRepo, bool> condition; //两个下拉框都有值 if (tagId != 0 && status != 0) { //判断搜索框传过来的值的状态进行不同的搜索 condition = s => s.StatusId == status && commodityId.Contains(s.Id); return(Search(condition)); } //标签下拉框为空 else if (tagId == 0 && status != 0) { condition = s => s.StatusId == status; return(Search(condition)); } //上架状态下拉框为空 else if (tagId != 0 && status == 0) { condition = s => commodityId.Contains(s.Id); return(Search(condition)); } //两个下拉框全为空的情况下 else { condition = s => s.Number == parameter || s.Name.Contains(parameter) || s.NameSpelling.Contains(parameter); return(Search(condition)); } //将复用的部分抽出单独形成一个方法。 IEnumerable <CommodityListDto> Search(Func <CommodityRepo, bool> conditions) { var SearchCommodity = _db.CommodityRepos .Where(conditions) .Where(s => s.Number == parameter || s.Name.Contains(parameter) || s.NameSpelling.Contains(parameter)) .Select(s => new CommodityListDto { Number = s.Number, Name = s.Name, Price = s.Price, Status = Enum.GetName(typeof(CommodityStatus), s.StatusId), DbCreateAt = s.CreateAt, DbUpdateAt = s.LastEditAt }); return(SearchCommodity); } }