Первый шаг - создать словарь для сопоставления писем со значениями их статуса.Затем выберите все элементы адреса электронной почты из первого документа и установите их атрибуты на основе словаря.
var dict = secondDoc.Descendants("EmailAddress")
.ToDictionary(e => e.Value, e => e.Attribute("status").Value);
var emails = firstDoc.Descendants()
.Where(e => e.Name.LocalName.StartsWith("EmailAddress")
&& Char.IsDigit(e.Name.LocalName[e.Name.LocalName.Length - 1]));
foreach (var email in emails)
{
string attribute;
if (dict.TryGetValue(email.Value, out attribute))
{
email.SetAttributeValue("status", attribute);
}
}
При таком подходе непосредственно обновляется firstDoc
;он не создает новый XElement
или XDocument
.Я добавил проверку Char.IsDigit
, чтобы избежать неправильного сопоставления поля EmailAddress
, которое не заканчивается числом, если оно существует.Если вы уверены, что этого никогда не произойдет, вы можете удалить эту проверку из запроса.