0

我不知道如何准确地表达我的问题,所以从前面道歉。我有一个 xml 文件,它具有如下元素:

- <Allow_BenGrade>
  <Amount BenListID="0">0</Amount> 
  </Allow_BenGrade>
- <Add_Earnings_NonTaxable>
  <Amount AddEarnID="0">0</Amount> 
  </Add_Earnings_NonTaxable>

我对Allow_BenGrade感兴趣,我可以在其中添加多个元素。我有 3 个项目的列表,但是当我循环将其写入文件时,它只写入列表中的最后一个项目,因此在Allow_BenGrade中没有 3 个元素,我最终有一个(项目列表中的最后一个) . 我的代码如下。请帮忙谢谢。

var query = from nm in xelement.Elements("EmployeeFinance")
                                    select new Allowance {
                                    a_empersonalID = (int)nm.Element("EmpPersonal_Id"),
                                    a_allbengradeID = (int)nm.Element("Grade_Id")
                           };
                var x = query.ToList();


                foreach (var xEle in x)
                {
                    var qryBenListGrade = from ee in context.Employee_Employ
                                 join abg in context.All_Inc_Ben_Grade
                                 on ee.Grade_Id equals abg.GradeID
                                 join abl in context.All_Inc_Ben_Listing
                                 on abg.All_Inc_Ben_ListingID equals abl.ID
                                 where ee.Employee_Personal_InfoEmp_id == xEle.a_empersonalID && abg.GradeID == xEle.a_allbengradeID && (abl.Part_of_basic == "N" && abl.Status == "A" && abl.Type_of_earnings == 2)
                                 //abl.Approved_on !=null &&
                                 select new 
                                 {
                                        abl.ID,
                                        abl.Amount,
                                        abg.GradeID,
                                        ee.Employee_Personal_InfoEmp_id,
                                        abl.Per_Non_Taxable,
                                        abl.Per_Taxable
                                 };
                    var y = qryBenListGrade.ToList();
                    //xEle.a_Amount = 0;
                    foreach (var tt in y)
                    {
                   Debug.WriteLine("amount: " + tt.Amount + " emp id: " + tt.Employee_Personal_InfoEmp_id + " ben list id: " + tt.ID);
                       // xEle.a_Amount = xEle.a_Amount + tt.Amount;

                        var result = from element in doc.Descendants("EmployeeFinance")
                                     where int.Parse(element.Element("EmpPersonal_Id").Value) == tt.Employee_Personal_InfoEmp_id
                                     select element;
                        foreach (var ele in result)
                        {
                            ele.Element("Allow_BenGrade").SetElementValue("Amount", tt.Amount);
                            //ele.Element("Allow_BenGrade").Element("Amount").SetAttributeValue("BenListID", tt.ID);
                        }

                    }
                    doc.Save(GlobalClass.GlobalUrl);
                }
4

2 回答 2

2

SetElementValue顾名思义,将设置Amount元素的值...您需要添加一个新元素:

ele.Element("Allow_BenGrade").Add(new XElement("Amount", 
                                      new XAttribute("BenListID", tt.ID),
                                      tt.Amount);

让我知道这是否可以为您解决。

于 2013-05-03T13:53:28.967 回答
0

XElement.SetElementValue方法:

设置子元素的值、添加子元素或删除子元素。

还:

该值被分配给具有指定名称的第一个子元素。如果不存在具有指定名称的子元素,则添加一个新的子元素。如果值为 null,则删除具有指定名称的第一个子元素(如果有)。

此方法不会将子节点或属性添加到指定的子元素。

您应该改用XElement.Add 方法

于 2013-05-03T13:54:35.113 回答