【问题标题】:LINQ to Objects - Assign list to propertyLINQ to Objects - 将列表分配给属性
【发布时间】:2015-08-27 09:03:39
【问题描述】:

我正在尝试编写一个 LINQ to Objects/XML 查询来创建对象。一世 有一个具有IList 属性SomeModelClass 的类。 SomeModelClass 也有几个 IList 需要从 XML 中填充。

这是我第一次尝试查询多个级别的嵌套 XML,但我不确定如何继续。

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

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

我有这样的课:

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

这是我的模型类:

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?
                     }

                 });

【问题讨论】:

    标签: c# xml linq linq-to-xml linq-to-objects


    【解决方案1】:

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

    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 元素及其值属性。

    【讨论】:

      猜你喜欢
      • 2017-12-25
      • 2013-09-03
      • 1970-01-01
      • 2018-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      相关资源
      最近更新 更多