代码之家  ›  专栏  ›  技术社区  ›  shamim

如何在XML LINQ上创建子项

  •  0
  • shamim  · 技术社区  · 14 年前

    在Northwind数据库中。我使用 订单和订单详情 表。我要创建一个XML文件,其中 秩序 在XML和上的项标记上显示 订单详情 展示 子项目 。假设orderID=1在item标签上显示,然后 订单详细说明 表信息 OrrordID=1 显示在子项上。

     XElement xml = new XElement("MyMenu",
                          from c in db.Orders
                          //where (c.ParentID == 0)
                          orderby c.OrderID
                          select new XElement("Item",
                                    c.OrderID == null ? null : new XAttribute("OrderID", c.OrderID),
                                     c.ShipName == null ? null : new XAttribute("ShipName", c.ShipName),
                                      c.OrderDate == null ? null : new XAttribute("OrderDate", c.OrderDate)
    
    
                                    )
                          );
    
                xml.Save(@"C:\contacts.xml");
    

    我需要在上面的语法上添加什么。给我看语法。提前谢谢。我研究C。上面的语法显示下面的输出:

    <?xml version="1.0" encoding="utf-8"?>
    <MyMenu>
      <Item OrderID="10248" ShipName="Vins et alcools Chevalier" OrderDate="1996-07-04T00:00:00" />
      <Item OrderID="10249" ShipName="Toms Spezialitäten" OrderDate="1996-07-05T00:00:00" />
      <Item OrderID="10250" ShipName="Hanari Carnes" OrderDate="1996-07-08T00:00:00" />
    </MyMenu>
    

    我想把贝娄弄出来

        <MyMenu>
          <Item OrderID="10248" ShipName="Vins et alcools Chevalier" OrderDate="1996-07-04T00:00:00" >
          <SubItem>  
           ..........
           ..........Contain detailTable Information for OrderID="10248"
           ...........
        </SubItem>
    </Item>      
        </MyMenu>
    

    以下语法无法创建以上输出:

     XElement xml = new XElement("MyMenu",
                          //from c in db.Orders
                           from c in db.Orders
                           join od in db.Order_Details on c.OrderID equals od.OrderID
                          //where (c.ParentID == 0)
                          orderby c.OrderID
                          select new XElement("Item",
                                    c.OrderID == null ? null : new XAttribute("OrderID", c.OrderID),
                                     c.ShipName == null ? null : new XAttribute("ShipName", c.ShipName),
                                      c.OrderDate == null ? null : new XAttribute("OrderDate", c.OrderDate),
                              new XElement("SubItem",
                                   od.OrderID == null ? null : new XAttribute("OrderID", od.OrderID),
                                   od.ProductID == null ? null : new XAttribute("ProductID", od.ProductID),
                                   od.Quantity == null ? null : new XAttribute("Quantity", od.Quantity)
                                   )
    
    
                                    )
                          );
    

    以上语法创建以下输出:

    <?xml version="1.0" encoding="utf-8"?>
    <MyMenu>
      <Item OrderID="10250" ShipName="Hanari Carnes" OrderDate="1996-07-08T00:00:00">
        <SubItem OrderID="10250" ProductID="41" Quantity="10" />
      </Item>
      <Item OrderID="10250" ShipName="Hanari Carnes" OrderDate="1996-07-08T00:00:00">
        <SubItem OrderID="10250" ProductID="51" Quantity="35" />
      </Item>
      <Item OrderID="10250" ShipName="Hanari Carnes" OrderDate="1996-07-08T00:00:00">
        <SubItem OrderID="10250" ProductID="65" Quantity="15" />
      </Item>
    </MyMenu>
    

    如何将orderid=“10250”所有子项放在一个项标记下?

    2 回复  |  直到 12 年前
        1
  •  0
  •   Lukas Winzenried    12 年前
    XElement xml = new XElement("MyMenu",
        //from c in db.Orders
        from c in db.Orders
        orderby c.OrderID
        select new XElement("Item",
            c.OrderID == null ? null : new XAttribute("OrderID", c.OrderID),
            c.ShipName == null ? null : new XAttribute("ShipName", c.ShipName),
            c.OrderDate == null ? null : new XAttribute("OrderDate", c.OrderDate),
            from od in db.Order_Details
            where od.OrderID == c.OrderID
            select new XElement("SubItem", 
                od.OrderID == null ? null : new XAttribute("OrderID", od.OrderID),
                od.ProductID == null ? null : new XAttribute("ProductID", od.ProductID),
                od.Quantity == null ? null : new XAttribute("Quantity", od.Quantity)
            )
        ));