Vai*_*ain 0 .net xml linq linq-to-entities
我想创建一个看起来像的XML
<Records FileUniqueId="1234567" Source="CCC">
<Record InfNumber="122354" AgencyNumber="017"></Record>
<Record InfNumber="122355" AgencyNumber="018"></Record>
<Record InfNumber="122356" AgencyNumber="018"></Record>
</Records>
XElement responseXML = new XElement("Records");
responseXML.SetAttributeValue(BusinessConstants.colFileUniqueID, _fileUniqueId);
responseXML.SetAttributeValue(BusinessConstants.colSourceName, _sourceName);
foreach (InfringementEntity ie in iLES.infringementEntities)
{
responseXML.Add(new XElement("Record"));
XElement record = responseXML.Element("Record");
record.SetAttributeValue(BusinessConstants.colInfringementNumber, ie.infringementNumber);
record.SetAttributeValue(BusinessConstants.colIssueAgency, ie.issueAgency);
}
Run Code Online (Sandbox Code Playgroud)
我使用上面的代码生成XML,但问题是当我为Record设置属性时,它会每次覆盖1st记录的属性.
所以我得到的XML是:
<Records FileUniqueId="1234567" Source="CCC">
<Record InfNumber="122356" AgencyNumber="018"></Record>
<Record/>
<Record/>
</Records>
Run Code Online (Sandbox Code Playgroud)
请帮忙.
是的,它覆盖了第一条记录的属性,因为你告诉它 - 你没有使用你刚刚创建的Record元素.你可以这样做:
foreach (InfringementEntity ie in iLES.infringementEntities)
{
XElement newRecord = new XElement("Record");
newRecord.SetAttributeValue(BusinessConstants.colInfringementNumber,
ie.infringementNumber);
newRecord.SetAttributeValue(BusinessConstants.colIssueAgency,
responseXML.Add(newRecord);
}
Run Code Online (Sandbox Code Playgroud)
......但是有更多惯用的方法,例如:
XElement responseXML = new XElement("Records",
iLes.infringementEntities.Select(ie => new XElement("Record",
new XAttribute(BusinessConstants.colInfringementNumber,
ie.infringementNumber),
new XAttribute(BusinessConstants.colIssueAgency, ie.issueAgency))));
Run Code Online (Sandbox Code Playgroud)
这取代了整个代码,包括foreach声明.