public ExecuteResult<CouponInfoCollectionResponse> GetList(CouponInfoGetListRequest request)
        {
            if (request == null)
            {
                return new ExecuteResult<CouponInfoCollectionResponse>(null) { StatusCode = StatusCode.ClientError, Message = "参数错误" };
            }

            int totalCount;
            var datas = this._couponRepository.GetPagedListByUserId(request.PagerRequest, out totalCount, request.AuthUid,
                                                        request.CouponSortOrder);
            var response = new CouponInfoCollectionResponse(request.PagerRequest, totalCount)
            {
                CouponInfoResponses = MappingManager.CouponInfoResponseMapping(datas).ToList()
            };

            var result = new ExecuteResult<CouponInfoCollectionResponse>(response);

            return result;
        }
 public ActionResult List(CouponInfoGetListRequest request, int? authuid, UserModel authUser)
 {
     request.AuthUid = authuid.Value;
     request.AuthUser = authUser;
     if (request == null)
         return new RestfulResult { Data = new ExecuteResult<CouponInfoResponse>(null)};
     var linq = _couponRepo.Get(c => c.User_Id == authUser.Id && c.Status != (int)CouponStatus.Deleted);
     if (request.Type.HasValue)
     {
         switch (request.Type.Value)
         { 
             case CouponRequestType.Used:
                 linq = linq.Where(c => c.Status == (int)CouponStatus.Used);
                 break;
             case CouponRequestType.Expired:
                 linq = linq.Where(c => c.Status != (int)CouponStatus.Used && c.ValidEndDate < DateTime.Now);
                 break;
             case CouponRequestType.UnUsed:
                 linq = linq.Where(c => c.Status != (int)CouponStatus.Used && c.ValidEndDate >= DateTime.Now);
                 break;
         }
     }
     int totalCount = linq.Count();
     int skipCount = request.Page > 0 ? (request.Page - 1) * request.Pagesize : 0;
     linq = linq.OrderByDescending(c => c.CreatedDate).Skip(skipCount).Take(request.Pagesize);
     var productLinq = _productRepo.GetAll().Join(_storeRepo.GetAll(), o => o.Store_Id, i => i.Id, (o, i) => new { Pd = o, S = i });
     var promotionLinq = _promotionRepo.GetAll().Join(_storeRepo.GetAll(), o => o.Store_Id, i => i.Id, (o, i) => new { Pr = o, S = i });
     var linq2 = linq.GroupJoin(productLinq, o => o.FromProduct, i => i.Pd.Id, (o, i) => new { C=o,Pd = i.FirstOrDefault() })
                    .GroupJoin(promotionLinq, o => o.C.FromPromotion, i => i.Pr.Id, (o, i) => new { C = o.C, Pd = o.Pd, Pr = i.FirstOrDefault() });
     var responseData = from l in linq2.ToList()
                        select new CouponInfoResponse().FromEntity<CouponInfoResponse>(l.C,
                                     c => {
                                         var prod = l.Pd;
                                         if (prod != null)
                                         {
                                             c.ProductInfoResponse = new ProductInfoResponse().FromEntity<ProductInfoResponse>(prod.Pd, p => {
                                                 p.StoreInfoResponse = new StoreInfoResponse().FromEntity<StoreInfoResponse>(prod.S);
                                             });
                                             c.ProductId = c.ProductInfoResponse.Id;
                                             c.ProductName = c.ProductInfoResponse.Name;
                                             c.ProductDescription = c.ProductInfoResponse.Description;
                                             c.ProductType = (int)SourceType.Product;
                                            
                                         }
                                         var pro = l.Pr;
                                         if (pro != null)
                                         {
                                             c.PromotionInfoResponse = new PromotionInfoResponse().FromEntity<PromotionInfoResponse>(pro.Pr, p => {
                                                 p.StoreInfoResponse = new StoreInfoResponse().FromEntity<StoreInfoResponse>(pro.S);
                                             });
                                             c.ProductId = c.PromotionInfoResponse.Id;
                                             c.ProductName = c.PromotionInfoResponse.Name;
                                             c.ProductDescription = c.PromotionInfoResponse.Description;
                                             c.ProductType = (int)SourceType.Promotion;
                                         }
                                        
                                     });
     var response = new CouponInfoCollectionResponse(request.PagerRequest,totalCount){
                          CouponInfoResponses = responseData.ToList()
                  };
     return new RestfulResult { Data = new ExecuteResult<CouponInfoCollectionResponse>(response) };
 }