public ActionResult Search(SearchCouponModel model) { var p = PredicateBuilder.True <CouponPromo>(); bool canPredicate = false; if (model.Type != null) { canPredicate = true; p = p.And(x => x.CouponType == model.Type.Value); } if (!string.IsNullOrEmpty(model.Key)) { canPredicate = true; p = p.And(x => x.Code.Contains(model.Key) || x.IssueTo.Contains(model.Key)); } if (model.IssuedOnBefore != null) { canPredicate = true; p = p.And(x => x.BeginDate >= model.IssuedOnBefore.Value); } if (model.IssuedOnAfter != null) { canPredicate = true; p = p.And(x => x.EndDate <= model.IssuedOnAfter.Value); } List <CouponPromo> c = new List <CouponPromo>(); if (canPredicate) { c = Db.Select <CouponPromo>(p).OrderByDescending(x => (x.IssueOn)).ToList(); } else { c = Db.Select <CouponPromo>(x => x.OrderByDescending(y => (y.IssueOn))); } ViewData["page"] = 1; ViewData["pages"] = 1; ViewData["items_per_page"] = c.Count; ViewData["total_items"] = c.Count; ViewData["action"] = "Index"; return(PartialView("_List", c)); }
public async Task <PaginatedResult <Coupon> > SearchAsync(SearchCouponModel req) { // filter var queryObject = QueryObject <Coupon> .Empty; if (!string.IsNullOrWhiteSpace(req.Keyword)) { var keyword = req.Keyword; queryObject.And(new CouponQueryObjects.ContainsKeyword(keyword)); } //Filter by start date if (req.StartDate.HasValue) { var startDate = req.StartDate.Value; queryObject.And(new CouponQueryObjects.FilterByStartDate(req.StartDate)); } //Filter by end date if (req.EndDate.HasValue) { var endDate = req.EndDate.Value; queryObject.And(new CouponQueryObjects.FilterByEndDate(req.EndDate)); } // filter by value of coupon if (req.Value > 0) { var value = req.Value; queryObject.And(new CouponQueryObjects.FilterByValue(value)); } // fillter by min price if (req.MinPrice.HasValue) { var minPrice = req.MinPrice.Value; queryObject.And(new CouponQueryObjects.FilterByMinPrice(minPrice)); } // orderby if (!req.Sort.Any()) { req.Sort.Add(new SortItem { FieldName = nameof(Coupon.IdentityKey) }); } req.Sort.ForEach(x => queryObject.AddOrderBy(x.FieldName, x.IsDescending)); // execute var result = await _genericRepo.SearchAsync(queryObject, req.Pagination); return(result); }