2011-06-11 124 views
3

我需要一些幫助,使一個linq查詢,將選擇產品對象的列表。每個產品對象都包含一個ProductItem列表。我不知道該怎麼做的部分是如何創建Product.ProductItems列表。有人可以幫我一把嗎?這裏是Product,ProductItem,以及Im玩的xml結構的例子。Linq - 如何選擇一個新對象來包含其他對象的列表?

這裏是這個我要去的方向的一個例子:

XDocument xDocument = XDocument.Load("../Content/index.xml"); 
      return xDocument.Descendants("item") 
       .Select(arg => 
         new Product 
         { 
          Name = arg.Parent.Attribute("name").Value, 
          ProductItems = new ProductItem{//set properties for PI} // This is where Im stuck. 


         }) 
       .ToList(); 
     } 

我試圖增強我的LINQ /λ技能,所以如果你可以給我,例如使用的lambda語法我將不勝感激它!

謝謝了。

public class Product 
{ 
    public string Name { get; set; } 
    public IList<ProductItem> ProductItems { get; set; } 

} 

public class ProductItem 
{ 
    public string Hwid { get; set; } 
    public string Href { get; set; } 
    public string Localization { get; set; } 
    public DateTime BuildDateTime { get; set; } 
    public string IcpBuildVersion { get; set; } 
} 

}

<products> 
<product name="Product1"> 
    <item hwid="abk9184"> 
    <href>Product1/abk9184_en-us/abk9184.html</href> 
    <localization>en-us</localization> 
    <build.start>2011-06-08 22:02 PM</build.start> 
    <build.icp>9.0.192.32</build.icp> 
    </item> 
    <item hwid="abk9185"> 
    <href>LearningModules/abk9185_en-us/abk9185.html</href> 
    <localization>en-us</localization> 
    <build.start>2011-06-08 22:03 PM</build.start> 
    <build.icp>9.0.192.32</build.icp> 
    </item> 
</product> 
<product name="Product2"> 
    <item hwid="aa6410"> 
    <href>Product2/aa6410_en-us/aa6410.html</href> 
    <localization>en-us</localization> 
    <build.start>2011-06-08 22:04 PM</build.start> 
    <build.icp>9.0.192.32</build.icp> 
    </item> 
    <item hwid="tu6488"> 
    <href>Product2/tu6488_en-us/tu6488.html</href> 
    <localization>en-us</localization> 
    <build.start>2011-06-08 22:04 PM</build.start> 
    <build.icp>9.0.192.32</build.icp> 
    </item> 

回答

12

你應該通過Product後代,而不是項目進行下去。這樣你就讀出Product元素。然後獲取相關項目會更容易。

var doc = XDocument.Load("../Content/index.xml"); 
var products = doc.Elements("product") 
    .Select(p => 
     new Product 
     { 
      Name = (string)p.Attribute("name"), 
      ProductItems = p.Elements("item") 
       .Select(i => 
        new ProductItem 
        { 
         //set properties for PI 
         Hwid = (string)i.Attribute("hwid"), 
         Href = (string)i.Element("href"), 
         Localization = (string)i.Element("localization"), 
         // etc. 
        }) 
       .ToList() 
     }) 
    .ToList(); 
+0

這是有道理的。我明白你是如何做第二次選擇的。看起來不錯。謝謝! – Nick 2011-06-11 18:51:44

相關問題