Попытка добавить новый элемент в определенный узел в дереве на основе значения атрибута nodes

#c# #asp.net-mvc-4 #linq-to-xml

#c# #asp.net-mvc-4 #linq-to-xml

Вопрос:

В следующем коде C sharp он всегда добавляет элементы XElements в первый базовый узел в дереве

Но мне нужно добавить почти как WHERE, чтобы сообщить Add, чтобы поместить данные в качестве дочернего элемента помещения с определенным значением ключевого атрибута. Не уверен, как это сделать синтаксически, заранее спасибо…

 doc.Element("Bill").Element("PremiseList").Element("Premise").Element("MeterList").Add
                         (
                             new XElement
                                 (
                                     "Meter", new XElement("MeterId", customerBillActivateModel.CustomerPremiseMeterProviders.FirstOrDefault(x => x.PremiseMeterProviderId == meter.Key.PremiseMeterProviderId).D3001_MeterId),
                                     new XElement("RSA", meter.Key.RSA),
                                     new XElement("PhysicalMeterSize", meter.Key.D3003_PhysicalMeterSize.ToString()),
                                     new XElement("ChargeableMeterSize", meter.Key.D3002_ChargeableMeterSize.ToString()),
                                     new XElement("PrevReadDate", meter.Key.PrevReadDate.ToShortDateString()),
                                     new XElement("PrevRead", meter.Key.PrevRead),
                                     new XElement("LastReadDate", meter.Key.LastReadDate.ToShortDateString()),
                                     new XElement("LastRead", meter.Key.LastRead),
                                     new XElement("ADC", meter.AverageDailyConsumption)
                                 )
                          );
 

введите описание изображения здесь

Комментарии:

1. Я немного приблизился к …. doc. Элемент («Счет»). Элемент («Предварительный список»). Потомки («Предпосылка»). Где(n => n.Атрибут («Ключ»). Значение == meter.Key.PremiseProviderId. toString()) . Элемент («Список параметров»). Добавить элемент «Но сейчас» («Список параметров»). Добавить» — последняя часть нуждается в изменении — я думаю, что на правильном пути ее закрытие

Ответ №1:

Понял, это требуемое решение…

                                             #region xml Meter
                doc.Element("Bill").Element("PremiseList").Descendants("Premise").Where(n => n.Attribute("Key").Value == meter.Key.PremiseProviderId.ToString()).Elements("MeterList").FirstOrDefault().Add
                 (
                     new XElement
                         (
                             "Meter", new XAttribute("MeterId", customerBillActivateModel.CustomerPremiseMeterProviders.FirstOrDefault(x => x.PremiseMeterProviderId == meter.Key.PremiseMeterProviderId).D3001_MeterId),
                             new XElement("RSA", meter.Key.RSA),
                             new XElement("PhysicalMeterSize", meter.Key.D3003_PhysicalMeterSize.ToString()),
                             new XElement("ChargeableMeterSize", meter.Key.D3002_ChargeableMeterSize.ToString()),
                             new XElement("PrevReadDate", meter.Key.PrevReadDate.ToShortDateString()),
                             new XElement("PrevRead", meter.Key.PrevRead),
                             new XElement("LastReadDate", meter.Key.LastReadDate.ToShortDateString()),
                             new XElement("LastRead", meter.Key.LastRead),
                             new XElement("ADC", meter.AverageDailyConsumption)
                         )
                  );
                #endregion xml