我尝试使用 XML Reader、Xpath...并且了解 linq 但不会找到解决这些问题的方法。
我必须提取信息,对于每个订单到一行中,在这一行中应该是第一个元素和项目和订单的信息以及订单的状态...
有没有一种方法可以将所有这些信息提取到一个 linq 查询中的一行中?还是我必须为此构建步骤?
(Visualstudio 2010/2013 C# .Net 4)
<Account>
<Name>Name1</Name>
<InId>100</InId>
<CustomID>100000087</CustomID>
<ZipCode>zipcode</ZipCode>
<Items>
<Item>
<ItemID>700</ItemID>
<ItemName>Itemname1</ItemName>
<Orders>
<Order>
<IDIndex>1000</IDIndex>
<IDParam>T1</IDParam>
<Themes>
<Theme>
<Status>Alert</Status>
<Lastget>01.01.2015</Lastget>
</Theme>
</Themes>
</Order>
</Orders>
<Item>
<ItemID>800</ItemID>
<ItemName>Itemname2</ItemName>
<Orders>
<Order>
<IDIndex>5001</IDIndex>
<IDParam>T1</IDParam>
<Themes>
<Theme>
<Status>Alert1</Status>
<Lastget>01.01.2015</Lastget>
</Theme>
</Themes>
</Order>
<Order>
<IDIndex>5002</IDIndex>
<IDParam>T1</IDParam>
<Themes>
<Theme>
<Status>Alert1</Status>
<Lastget>01.01.2015</Lastget>
</Theme>
</Themes>
</Order>
<Order>
<IDIndex>5003</IDIndex>
<IDParam>T1</IDParam>
<Themes>
<Theme>
<Status>Alert2</Status>
<Lastget>01.01.2015</Lastget>
</Theme>
</Themes>
</Order>
</Orders>
</Item>
</Items>
</Account>
最佳答案
以下查询将为您提供所需的数据:-
var result = xdoc.Root.Descendants("Item")
.Select(x => new
{
Name = (string)x.Document.Root.Element("Name"),
InId = (string)x.Document.Root.Element("InId"),
CustomID = (string)x.Document.Root.Element("CustomID"),
ItemID = (string)x.Element("ItemID"),
ItemName = (string)x.Element("ItemName"),
OrdersList = x.Descendants("Order")
.Select(y => new
{
IDIndex = (string)y.Element("IDIndex"),
IDParam = (string)y.Element("IDParam"),
ThemesList = y.Descendants("Theme")
.Select(z => new
{
Status = (string)z.Element("Status"),
Lastget = (string)z.Element("Lastget")
}).ToList()
}).ToList()
});
请注意,将为 2 个 items
创建两个列表,我为每个项目创建一个 orders
列表,并在每个订单列表中包含 themes
。
关于c# - 多元素到多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28857718/