Linq-如何选择一个新对象来包含其他对象的列表
本文关键字:对象 其他 列表 新对象 包含 何选择 选择 Linq- 一个 | 更新日期: 2023-09-27 17:59:07
我需要一些帮助来创建一个linq查询,该查询将选择一个Product对象列表。每个产品对象都包含一个ProductItem列表。我不确定如何做的部分是如何创建产品。ProductItems列表。有人能帮我一把吗。以下是Product、ProductItem和Im正在使用的xml结构示例。
以下是我前进方向的一个例子:
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技能,所以如果你能给我一个使用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>
您应该遍历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();