public BillViewModel UpdateBill(BillViewModel billViewModel) { var billDetails = Mapper.Map <List <BillDetailViewModel>, List <BillDetail> >(billViewModel.BillDetails.ToList()); var bill = Mapper.Map <BillViewModel, Bill>(billViewModel); bill.BillDetails.Clear(); foreach (var item in billDetails) { var product = _productRepository.FindById(item.ProductId); item.Price = product.Price; var billDetail = _billDetailRepository.FindById(item.Id); if (billDetail == null) // add new bill detail { bill.BillDetails.Add(item); } else // edit existed bill detail { billDetail.ColorId = item.ColorId; billDetail.ProductId = item.ProductId; billDetail.SizeId = item.SizeId; billDetail.Quantity = item.Quantity; billDetail.Price = item.Price; bill.BillDetails.Add(billDetail); } } // remove bill detail that var billDetailToRemove = _billDetailRepository.FindAll(x => !billDetails.Contains(x) && x.BillId == bill.Id).ToList(); foreach (var item in billDetailToRemove) { _billDetailRepository.Remove(item.Id); } _billRepository.Update(bill); return(billViewModel); }