public void SetAdditionalServices(IEnumerable <AdditionalService> newAdditionalServices) { var existingAdditionalServices = AppointmentAdditionalServices .Select(service => service.AdditionalService) .ToArray(); var removedAppointmentServices = existingAdditionalServices.Except(newAdditionalServices) .Select(additionalService => AppointmentAdditionalServices.Single(join => join.AdditionalService.Id == additionalService.Id)) .ToArray(); var addedServices = newAdditionalServices.Except(existingAdditionalServices) .Select(additionalService => new AppointmentAdditionalService(additionalService, this)) .ToArray(); AppointmentAdditionalServices.RemoveRange(removedAppointmentServices); AppointmentAdditionalServices.AddRange(addedServices); }