public DNSRecordCollection WhereUpdated(DNSRecordCollection compareTo) { DNSRecordCollection newRecords = this.WhereNew(compareTo); DNSRecordCollection updatedRecords = this.IntersectWith(compareTo, DNSRecordEqualityComparer.Instance); DNSRecordCollection updatedRecordsWithoutNewRecords = new DNSRecordCollection(updatedRecords.Except(newRecords, DNSRecordNameTypeEqualityComparer.Instance)); return(Clone(updatedRecordsWithoutNewRecords)); }
private DNSRecordCollection ApplyToRecord(Action <DNSRecord> action) { DNSRecordCollection clone = Clone(this); foreach (DNSRecord dnsRecord in clone) { action(dnsRecord); } return(clone); }
private static string?FindId(DNSRecord record, DNSRecordCollection dnsRecords) { return(dnsRecords.FirstOrDefault(r => r.Type == record.Type && r.Name == record.Name)?.Id); }
private static DNSRecordCollection Clone(DNSRecordCollection from) { return(new DNSRecordCollection(from.Select(Map))); }
public DNSRecordCollection WithUpdatedIdsFrom(DNSRecordCollection dnsRecords) { return(ApplyToRecord(d => d.Id = FindId(d, dnsRecords))); }
private DNSRecordCollection IntersectWith(DNSRecordCollection compareTo, IEqualityComparer <DNSRecord> equalityComparer) { DNSRecordCollection records = new DNSRecordCollection(compareTo.Where(r => !this.Contains(r, equalityComparer))); return(records.Any() ? records : Empty()); }
public DNSRecordCollection WhereNew(DNSRecordCollection compareTo) { DNSRecordCollection newRecords = this.IntersectWith(compareTo, DNSRecordNameTypeEqualityComparer.Instance); return(Clone(newRecords)); }