private IEnumerable<CouponCodeUsageViewModel> doSearch(CouponUsageOption search) { var dbContext = _proRepo.Context; var clinq = from cl in dbContext.Set<CouponLogEntity>() where cl.Type==(int)CouponType.Promotion join sr in dbContext.Set<StoreRealEntity>() on cl.ConsumeStoreNo equals sr.StoreNo into cls from csl in cls.DefaultIfEmpty() select new { CL = cl, CS = csl }; var linq= dbContext.Set<CouponHistoryEntity>() .Join(dbContext.Set<PromotionEntity>(),o=>o.FromPromotion,i=>i.Id,(o,i)=>new {C=o,P=i}) .Join(dbContext.Set<UserEntity>(),o=>o.C.User_Id,i=>i.Id,(o,i)=>new {C=o.C,P=o.P,U=i}) .GroupJoin(clinq, o => o.C.CouponId, i => i.CL.Code, (o, i) => new { C = o.C, P = o.P, U = o.U, CLs = i }) .Where(s=>(!search.PromotionId.HasValue || s.C.FromPromotion == search.PromotionId.Value) && (!search.CreateDateFrom.HasValue || s.C.CreatedDate>=search.CreateDateFrom.Value) && (!search.CreateDateTo.HasValue || s.C.CreatedDate <= search.CreateDateTo.Value)); if (search.Status.HasValue) { switch (search.Status.Value) { case (int)CouponStatus.Expired: linq = linq.Where(l => l.C.ValidEndDate <= DateTime.Now && l.C.Status == (int)CouponStatus.Normal); break; case (int)CouponStatus.Normal: linq = linq.Where(l => l.C.Status == (int)CouponStatus.Normal && l.C.ValidEndDate > DateTime.Now); break; case (int)CouponStatus.Used: linq = linq.Where(l => l.C.Status == (int)CouponStatus.Used); break; case (int)CouponStatus.Deleted: linq = linq.Where(l => l.C.Status == (int)CouponStatus.Deleted); break; } } linq = linq.OrderByDescending(s=>s.C.CreatedDate); var result = linq.ToList().Select(l => new CouponCodeUsageViewModel() { Code = l.C.CouponId, PromotionName = l.P.Name, CustomerPhone = l.U.Mobile, CustomerNick = l.U.Nickname, PromotionDate = string.Format("{0}-{1}",l.P.StartDate,l.P.EndDate), CreateDate = l.C.CreatedDate, Status = l.C.Status, Logs = l.CLs.OrderByDescending(cl => cl.CL.CreateDate) .Select(cl => new CouponLogViewModel().FromEntity<CouponLogViewModel>(cl.CL, p => { p.StoreName = cl.CS == null ? string.Empty : cl.CS.Name; })) }); return result; }
public ActionResult Search(PagerRequest request, CouponUsageOption search) { if (!ModelState.IsValid) { ViewBag.SearchOptions = search; return View(); } var prods = doSearch(search); var v = new Pager<CouponCodeUsageViewModel>(request, prods.Count()) { Data = prods.ToList() }; ViewBag.SearchOptions = search; return View(v); }