LINQ to Objects - 将列表分配给 属性

LINQ to Objects - Assign list to property

我正在尝试编写一个 LINQ to Objects/XML 查询来创建对象。我 有一个 class 有一个 属性 IListSomeModelClassSomeModelClass 也有几个 IList 需要从 XML.

中填充

这是我第一次尝试查询多层嵌套 XML,我不确定如何继续。

目前代码无法编译,因为select new似乎无法嵌套。我如何实际查询嵌套的 XML 以创建一个包含对象列表的对象,该对象也包含字符串列表?

我已经展示了我尝试过的代码。

我有一个 class 这样的:

public class MyClass
{
    public string Name { get; set }
    public IList<SomeModelClass> ModelList { get; set; }
}

这是我的模型class:

public class SomeModelClass
{
    public IList<string> MyList1 { get; set; }
}

XML 看起来像这样:

  <someXml>
    <section name="test">
      <myModelClassXml>
        <someValue value="string1" />
        <someValue value="string2" />
        <someValue value="string3" />
      </myModelClassXml>
    </section>

    <section name="test2">
      <myModelClassXml>
        <someValue value="string1" />
      </myModelClassXml>
    </section>
  </someXml>

我目前的代码:

    var query = (from r in xdoc.Descendants("someXml").Descendants("section")
                 select new MyClass()
                 {
                     Name = r.Attribute("name").Value,

                     //Make list of SomeModelClass AND ALSO populate SomeModelClass's lists
                     select new SomeModelClass
                     {
                        MyList1 = What needs to be here?
                     }

                 });

这应该会给你正确的结果:-

List<MyClass> result = xdoc.Root.Descendants("section")
            .Select(x => new MyClass
               {
                   Name = (string)x.Attribute("name"),
                   ModelList = x.Elements("myModelClassXml")
                                .Select(y => new SomeModelClass 
                    {
                        MyList1 = y.Elements("someValue")
                                   .Select(z => (string)z.Attribute("value")).ToList()
                                                               }).ToList()
                    }).ToList();

先找到section的所有后代,然后投影到MyClass。现在由于 myModelClassXmlsection 的直接子元素,我们可以使用 Elements 进一步获取 someValue 元素及其值属性。