c# - 多元素到多行

标签 c# xml linq linq-to-xml

我尝试使用 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/

相关文章:

c# - 更新 EF 4.1 中的记录

xml - xml应该表示一个集合还是一个列表?

linq - 为什么这个 LINQ 这么慢?

c# - 有没有办法结合 LINQ 和异步

c# - 在验证器上设置 ControlToValidate

c# - 如何删除计数最低的子列表并保留主列表中计数最高的子列表?

c# - 我需要比较两个可能缺少元素的非常大的集合

c# - 为特定 id c# 插入新的 xml 节点

java - 在这种情况下如何获取 Activity 上下文?

c# - 使用 Linq 将列表与 C# 中的一组列表进行比较