private void AddOrUpdatePartnerAddress(Partner partner, ICollection <AddressBook> addCollection, bool donotupdatelegaladdress) { if (partner == null || addCollection == null || addCollection.Count == 0) { return; } if (partner.Address == null || partner.Address.Count == 0) { //У партнера нет адреса var result = new List <AddressBook>(); //Выбираем все не юридические адреса var adrs = addCollection.Where(p => p.ADDRESSBOOKTYPECODE != AddressBookType.ADR_LEGAL.ToString()).ToArray(); if (adrs.Length > 0) { result.AddRange(adrs); } //Добавляем только один юр. адрес var adrlegal = addCollection.FirstOrDefault(p => p.ADDRESSBOOKTYPECODE == AddressBookType.ADR_LEGAL.ToString()); if (adrlegal != null) { result.Add(adrlegal); } if (result.Count > 0) { partner.Address = new WMSBusinessCollection <AddressBook>(result); } } else { //У партнера есть адрес //Получим список новых адресов var newaddreses = addCollection.Where(p => AddressHelper.FindAddressInCollection(partner.Address, p) == null).ToArray(); //Добавляем все новые не юридические адреса var adrs = newaddreses.Where(p => p.ADDRESSBOOKTYPECODE != AddressBookType.ADR_LEGAL.ToString()).ToArray(); if (adrs.Length > 0) { partner.Address.AddRange(adrs); } //Ищем новый юридический адрес var adrlegal = newaddreses.FirstOrDefault(p => p.ADDRESSBOOKTYPECODE == AddressBookType.ADR_LEGAL.ToString()); if (adrlegal != null) { var existsadrlegal = AddressHelper.GetAddressWithMaxIdByType(partner.Address, AddressBookType.ADR_LEGAL.ToString()); if (existsadrlegal != null) { if (!donotupdatelegaladdress) { //Будем обновлять юр. адрес по макс. id var id = existsadrlegal.GetKey <decimal>(); MapTo(adrlegal, existsadrlegal); existsadrlegal.SetProperty(existsadrlegal.GetPrimaryKeyPropertyName(), id); } } else { //Добавляем partner.Address.Add(adrlegal); } } } }