C# 如何订购与LAMBDA的父子关系?
使用LAMBDA编写LINQ查询以将父项(由于父子依赖关系)放在列表的第一位的正确方法是什么 例如,预期输出应该是一个有序列表(名为“Hierarchy”的objecttype),其中包含所有字段ID,类型字符串的父项):C# 如何订购与LAMBDA的父子关系?,c#,linq,recursion,lambda,tree,C#,Linq,Recursion,Lambda,Tree,使用LAMBDA编写LINQ查询以将父项(由于父子依赖关系)放在列表的第一位的正确方法是什么 例如,预期输出应该是一个有序列表(名为“Hierarchy”的objecttype),其中包含所有字段ID,类型字符串的父项): ID父项 A2空 A1 A2 A5 A2(取决于A2) A3 A2 A4 A5(取决于A5) 树遍历通常需要某种递归,而且由于C#作为一种语言不支持命名lambda表达式(与命名函数表达式的JavaScript概念不同),我想不出在使用lambdas的纯LINQ查询中干净地
- ID父项
- A2空
- A1 A2
- A5 A2(取决于A2)
- A3 A2
- A4 A5(取决于A5)
IEnumerable items=new[]
{
新的ItemType(){ID=“A4”,ParentID=“A5”},
新的ItemType(){ID=“A5”,ParentID=“A2”},
新的ItemType(){ID=“A1”,ParentID=“A2”},
新的ItemType(){ID=“A3”,ParentID=“A2”},
新的ItemType(){ID=“A2”,ParentID=null},
};
var childrenLookup=items.ToLookup(i=>i.ParentID);
Func preOrderTraverse=null;
preOrderTraverse=新函数(项=>
{
var curNode=可枚举。重复(第1项);
var childNodes=childrenLookup[item.ID]
.OrderBy(i=>i.ID)//按ID对同级排序
.选择多个(预订购行程);
返回可枚举的.Union(curNode,childNodes);
});
var preOrderTraversal=childrenLookup[null]。SelectMany(preOrderTraverse);
foreach(预订单Traversal中的var项)
WriteLine($“{item.ID},{item.ParentID}”);
代码的输出是:
A2,
A1, A2
A3, A2
A5, A2
A4, A5
A2,
A1、A2
A3、A2
A5、A2
A4、A5
列表和列表中对象的类型是否可能重复?从您所写的内容来看,这些是字符串吗?为什么A5显示在A1之前是列表(而两者共享同一父级)?输出是否有特定规则?您的措辞不清楚-据我所知,没有LAMBDA查询-您是指使用LAMBDA表达式的LINQ查询还是使用查询表达式的LINQ查询?预期的输出是什么?和订购单?等级制度?到底是什么? A2, A1, A2 A3, A2 A5, A2 A4, A5