#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