public async Task <ActionResult> getAllCoupons(string id) { try { // List<Coupon> coupons =await _couponRepository.GetAvailableCoupon(); Task <List <Coupon> > TaskGetCounpon = _couponRepository.GetAvailableCoupon(); Task <List <string> > TaskGetCouponIdsUsed = _orderRepository.GetListCouponIdInOrderOfUser(id); await Task.WhenAll(TaskGetCounpon, TaskGetCouponIdsUsed); List <Coupon> coupons = TaskGetCounpon.Result; List <string> couponIdsUsed = TaskGetCouponIdsUsed.Result; List <string> listCouponIdsAvailable = new List <string>(); for (int i = 0; i < coupons.Count; i++) { listCouponIdsAvailable.Add(coupons[i].CouponId); } // List<string> couponIdsUsed = await _orderRepository.GetListCouponIdInOrderOfUser(id); List <Coupon> returnCoupons = new List <Coupon>(); for (int i = 0; i < couponIdsUsed.Count; i++) { if (listCouponIdsAvailable.Contains(couponIdsUsed[i])) { listCouponIdsAvailable.Remove(couponIdsUsed[i]); } } for (int i = 0; i < coupons.Count; i++) { if (listCouponIdsAvailable.Contains(coupons[i].CouponId)) { returnCoupons.Add(coupons[i]); } } string json = JsonConvert.SerializeObject(returnCoupons); return(Ok(json)); } catch (Exception e) { return(BadRequest(JsonConvert.SerializeObject(new { Error = e.Message }))); } }