EDIT
下面的代码将扁平化层级:
var list = new List<Parent>
{
new Parent
{
ParentID = "parentID1",
Children = new List<Child> {new Child {ChildID = "childID1"}, new Child {ChildID = "childID2"}}
},
new Parent
{
ParentID = "parentID2",
Children = new List<Child> {new Child {ChildID = "childID3"}, new Child {ChildID = "childID4"}}
}
};
IEnumerable<XElement> list1 = (from parent in list
from child in parent.Children
select
new XElement("Mapping", new XAttribute("ID", parent.ParentID),
new XAttribute("ChildID", child.ChildID)));
string @join = string.Join(Environment.NewLine, list1);
输出:
<Mapping ID="parentID1" ChildID="childID1" />
<Mapping ID="parentID1" ChildID="childID2" />
<Mapping ID="parentID2" ChildID="childID3" />
<Mapping ID="parentID2" ChildID="childID4" />
下面是关于如何实现它的一个例子:
注:这是不行的,它会产生一个异常说'重复属性'
List<Parent> list = new List<Parent>
{
new Parent() {ParentID = "parentID1", Children = new List<Child>() {new Child() {ChildID = "childID1"},new Child() {ChildID = "childID2"}}},
new Parent() {ParentID = "parentID2", Children = new List<Child>() {new Child() {ChildID = "childID3"},new Child() {ChildID = "childID4"}}}
};
IEnumerable<string> enumerable = xElements.Select(s => s.ToString());
IEnumerable<XElement> xElements = list.Select(s => new XElement("Mapping", new XAttribute("ID", s.ParentID), s.Children.Select(t => new XAttribute("ChildID", t.ChildID))));
IEnumerable<string> enumerable = xElements.Select(s => s.ToString());
var @join = string.Join(Environment.NewLine, enumerable);
这人会因为它会使用的Select
使用当前对象的索引过载:
var list = new List<Parent>
{
new Parent
{
ParentID = "parentID1",
Children = new List<Child> {new Child {ChildID = "childID1"}, new Child {ChildID = "childID2"}}
},
new Parent
{
ParentID = "parentID2",
Children = new List<Child> {new Child {ChildID = "childID3"}, new Child {ChildID = "childID4"}}
}
};
IEnumerable<XElement> xElements =
list.Select(
s =>
new XElement("Mapping", new XAttribute("ID", s.ParentID),
s.Children.Select((t, u) => new XAttribute(string.Format("ChildID_{0}", u), t.ChildID))));
var @join = string.Join(Environment.NewLine,xElements);
结果:不是你已经期待了吧?
<Mapping ID="parentID1" ChildID_0="childID1" ChildID_1="childID2" />
<Mapping ID="parentID2" ChildID_0="childID3" ChildID_1="childID4" />
为什么我使用这个过载?
因为父母有一个儿童的列表,而第一个代码将与一个孩子一起工作,它不会与他们中的许多人。
结论:
不知道关于你想达到什么目的,
你为什么不只是保持你的对象的结构,因为它是目前?
'假设一个完全填充的父对象',如何张贴它? –
我不明白你希望看到什么。这是一个概念性问题。将填充ParentID和ChildID值的实际字符串文字对解决方案来说是无关紧要的。因此,没有什么可以发布的。 – Rire1979
到目前为止,您在尝试生成这种类型的文件时尝试了些什么?您具体执行哪些问题? – Servy