Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
178 views
in Technique[技术] by (71.8m points)

c# - Trying to add new XElement to specifc node in tree based on the nodes attribute value

In the following C sharp code it always adds the XElements into the first Premise node in the tree

But i need to add almost like a WHERE to tell the Add to put the data as child of Premise with a specific Key attribute value. Not sure how to do this syntactically, thanks in advance...

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)
                                 )
                          );

enter image description here

question from:https://stackoverflow.com/questions/65879077/trying-to-add-new-xelement-to-specifc-node-in-tree-based-on-the-nodes-attribute

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Got it, this is the solution required...

                                            #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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...