C# Linq-如何选择新对象以包含其他对象的列表?

C# Linq-如何选择新对象以包含其他对象的列表?,c#,linq,lambda,C#,Linq,Lambda,我需要一些帮助来进行linq查询,该查询将选择产品对象列表。每个产品对象都包含一个ProductItem列表。我不确定如何做的部分是如何创建Product.ProductItems列表。谁能帮我一下吗。下面是Product、ProductItem和我正在使用的xml结构示例 下面是一个例子,说明了我的方向: XDocument xDocument = XDocument.Load("../Content/index.xml"); return xDocument.Desc

我需要一些帮助来进行linq查询,该查询将选择产品对象列表。每个产品对象都包含一个ProductItem列表。我不确定如何做的部分是如何创建Product.ProductItems列表。谁能帮我一下吗。下面是Product、ProductItem和我正在使用的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; }
}
公共类产品
{
公共字符串名称{get;set;}
公共IList ProductItems{get;set;}
}
公共类ProductItem
{
公共字符串Hwid{get;set;}
公共字符串Href{get;set;}
公共字符串本地化{get;set;}
公共日期时间BuildDateTime{get;set;}
公共字符串IcpBuildVersion{get;set;}
}
}


Product1/abk9184_en-us/abk9184.html
美国英语
2011-06-08 22:02下午
9.0.192.32
学习模块/abk9185_en-us/abk9185.html
美国英语
2011-06-08 22:03下午
9.0.192.32
Product2/aa6410_en-us/aa6410.html
美国英语
2011-06-08 22:04下午
9.0.192.32
Product2/tu6488_en-us/tu6488.html
美国英语
2011-06-08 22:04下午
9.0.192.32

您应该查看
产品
子体,而不是项目。这样,您就可以读取
产品
元素。这样就更容易获得相关的项目

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();

这是有道理的。我知道你在做第二个选择。看起来不错。非常感谢。
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();