1

私は次のXMLを持っています:-

<customer>
    <id>ALFKI</id>
    <name>Alfreds Futterkiste</name>
    <address>Obere Str. 57</address>
    <city>Berlin</city>
    <postalcode>12209</postalcode>
    <country>Germany</country>
    <phone>030-0074321</phone>
    <fax>030-0076545</fax>
    <orders>
      <order>
        <id>10643</id>
        <orderdate>1997-08-25T00:00:00</orderdate>
        <total>814.50</total>
      </order>
      <order>
        <id>10692</id>
        <orderdate>1997-10-03T00:00:00</orderdate>
        <total>878.00</total>
      </order>
    </orders>
</customer>

次の形式でデータを取得したい:-国名:ドイツ都市名:ベルリン注文:orderid1、orderid2 .. ..

都市名:マンハイムの注文:orderid1、orderid2など。

つまり、各国、それぞれの都市、およびその都市のすべてのorderidです。

以下のクエリを使用して、国とその都市をグループ化できますが、その国の注文を取得できません:-

List<Customer> Customers = GetCustomerData();
            var query = (from cust in Customers
                         from ord in cust.Orders 
                         group cust by cust.Country into CountryGroup
                         select new
                         {
                             CountryName = CountryGroup.Key,
                             CityGroup = (from c in CountryGroup 
                                          where c.Country == CountryGroup.Key 
                                          group c by c.City into CityGroup
                                          select new
                                          {
                                              CityName = CityGroup.Key
                                          })

                         });

GetCustomerDataのコード:-

CustomerList = (from e in XDocument.Load(@"D:\Console Application\LINQDemo\GroupingOperators\GroupingOperators\XMLFiles\Customers.xml").Root.Elements("customer")
                            select new Customer
                            {
                                CustomerID = (string)e.Element("id"),
                                CustomerName = (string)e.Element("name"),
                                Address = (string)e.Element("address"),
                                City = (string)e.Element("city"),
                                Region = (string)e.Element("region"),
                                PostalCode = (string)e.Element("postalcode"),
                                Country = (string)e.Element("country"),
                                PhoneNo = (string)e.Element("phone"),
                                Fax = (string)e.Element("fax"),
                                Orders = (from o in e.Element("orders").Elements("order")
                                          select new Order
                                          {
                                              OrderID = (int)o.Element("id"),
                                              OrderDate = (DateTime)o.Element("orderdate"),
                                              OrderTotal = (decimal)o.Element("total")
                                          }).ToArray()
                            }).ToList();

助けてください!

TIA。

4

1 に答える 1

4

顧客の正しい解析を行う場合、クエリは次のようになります。

var query = from cust in Customers
            group cust by new { cust.Country, cust.City } into g
            select new
            {
                CountryName = g.Key.Country,
                CityGroup = g.Key.City,
                Orders = g.SelectMany(c => c.Orders)
            };

そしてここに解析があります(念のため):

private List<Customer> GetCustomerData()
{            
    XDocument xdoc = XDocument.Load(path_to_xml);
    return xdoc.Descendants("customer")
                .Select(c => new Customer()
                {
                    Id = (string)c.Element("id"),
                    Name = (string)c.Element("name"),
                    Address = (string)c.Element("address"),
                    Country = (string)c.Element("country"),
                    City = (string)c.Element("city"),
                    Orders = c.Descendants("order")
                                .Select(o => new Order()
                                {
                                    Id = (int)o.Element("id"),
                                    Date = (DateTime)o.Element("orderdate"),
                                    Total = (decimal)o.Element("total")
                                }).ToList()
                }).ToList();
}

次のクラスを使用した場所(郵便番号、ファックス、電話なし)

public class Customer
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
    public string Country { get; set; }
    public string City { get; set; }
    public List<Order> Orders { get; set; }
}

public class Order
{
    public int Id { get; set; }
    public DateTime Date { get; set; }
    public decimal Total { get; set; }
} 
于 2012-12-12T06:52:38.830 に答える