Как создать Sub Item на Xml Linq - PullRequest
       35

Как создать Sub Item на Xml Linq

0 голосов
/ 06 августа 2010

В базе данных Northwind. Я использую order и orderDetails таблица. Я хочу создать xml-файл, где order отображается в теге Item в XML и orderdetails показать на подпункт .Suppose orderid = 1 показать на теге Item затем orderdetais табличная информация OrderID = 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" всех подэлементов в один тег Item?

Ответы [ 2 ]

1 голос
/ 06 августа 2010
0 голосов
/ 17 ноября 2012
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)
        )
    ));
...