Пример #1
0
 public IEnumerable<CommodityListDto> SearchCommodity([FromServices]ICommodityService CommodityService, [FromBody]string parameter, int tagId, CommodityStatus status)
 {
     return CommodityService.SerachCommodity(parameter,tagId,status);
 }
Пример #2
0
        /// <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);
            }
        }