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);
        }
Exemple #2
0
 public ReferralDifference(ReferralEqualityComparer comparer)
 {
     _comparer = comparer;
 }