LINQ to Objects - 将列表分配给 属性
LINQ to Objects - Assign list to property
我正在尝试编写一个 LINQ to Objects/XML 查询来创建对象。我
有一个 class 有一个 属性 IList
的 SomeModelClass
。 SomeModelClass
也有几个 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
。现在由于 myModelClassXml
是 section
的直接子元素,我们可以使用 Elements
进一步获取 someValue
元素及其值属性。
我正在尝试编写一个 LINQ to Objects/XML 查询来创建对象。我
有一个 class 有一个 属性 IList
的 SomeModelClass
。 SomeModelClass
也有几个 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
。现在由于 myModelClassXml
是 section
的直接子元素,我们可以使用 Elements
进一步获取 someValue
元素及其值属性。