public async Task UpdateReferralsAsync(OpportunityItemDto dto) { var existingReferrals = _referralRepository.GetManyAsync(r => r.OpportunityItemId == dto.OpportunityItemId) .ToList(); var newReferrals = _mapper.Map <List <Referral> >(dto.Referral); foreach (var nr in newReferrals) { nr.OpportunityItemId = dto.OpportunityItemId; } var comparer = new ReferralEqualityComparer(); var toBeAdded = newReferrals.Except(existingReferrals, comparer).ToList(); var same = existingReferrals.Intersect(newReferrals, comparer).ToList(); var toBeDeleted = existingReferrals.Except(same).ToList(); Referral Find(Referral referral) => existingReferrals.First(r => r.Id == referral.Id); var deleteReferrals = toBeDeleted.Select(Find).ToList(); await _referralRepository.DeleteManyAsync(deleteReferrals); await _referralRepository.CreateManyAsync(toBeAdded); var updateReferrals = same.Select(Find).ToList(); await _referralRepository.UpdateManyAsync(updateReferrals); }
public ReferralDifference(ReferralEqualityComparer comparer) { _comparer = comparer; }