如何根据Rule1和Rule2的条件添加地址和HomeAddress的值。
Xml文件:
<?xml version="1.0" encoding="utf-8"?>
<File>
<Data>
<id></id>
<name></name>
<address></address>
<HomeAddress></HomeAddress>
</Data>
</File>
C#代码 [实际上xml是复杂的文件]
XDocument xmlDocFinal = XDocument.Load(@"E:/Test.xml"); string[]
myCondition = {"Rule1","Rule2"};
foreach(string rule in myCondition)
{
var dataList = (from root in xmlDoc.Descendants("File")
from Data in root.Elements("Data")
select new
{
// For
Name = Data.Element("name").Value,
ID = Data.Element("id").Value,
// if rule1 then add Address otherwise ingnor it
Address =Data.Element("address").Value
// if rule2 then add HomeAddress otherwise ingnor it
HomeAddress = Data.Element("HomeAddress").Value
})
.ToList();
}
答案 0 :(得分:1)
您可以使用conditional operator制作内联条件。像这样:
Address = someCondition ? Data.Element("address").Value : string.Empty,
HomeAddress = anotherCondition ? Data.Element("HomeAddress").Value : string.Empty
因此,如果someCondition
为true
,则Address
设置为该值,否则将其设置为默认值(此处我使用string.Empty
,您可以使用你喜欢的任何东西)。设置HomeAddress
也是如此。
修改:根据以下评论,如果您要创建两个单独的类型,那么您将需要两个单独的查询。像这样:
var dataListAddress = (from root in xmlDoc.Descendants("File")
from Data in root.Elements("Data")
where someCondition // first condition
select new
{
Name = Data.Element("name").Value,
ID = Data.Element("id").Value,
Address = Data.Element("address").Value
}).ToList();
var dataListHomeAddress = (from root in xmlDoc.Descendants("File")
from Data in root.Elements("Data")
where anotherCondition // second condition
select new
{
Name = Data.Element("name").Value,
ID = Data.Element("id").Value,
HomeAddress = Data.Element("HomeAddress").Value
}).ToList();
这是因为select
子句中的匿名类型不同。如果它是object
或dynamic
之类的集合,您也许可以将它们合并到同一个集合中,但是当您需要使用该集合时,这可能是难以置信的下游。