【发布时间】:2019-12-04 15:24:01
【问题描述】:
我有一个递归 LINQ 查询函数,它将平面树结构从数据库转换为层次结构树。现在我想将索引添加到每个树叶。问题是索引必须从其父级嵌套。
这是LINQ递归函数
public IList<QuestionGroupTree> FlatToHierarchy(IEnumerable<QuestionGroupTree> list, string parentId)
{
return list.Where(i => i.CParentId == parentId)
.Select((v, i) => new QuestionGroupTree {
CNodeId = v.CNodeId,
CParentId = v.CParentId,
CNodeName = v.CNodeName,
Children = FlatToHierarchy(list, v.CNodeId),
NodeIndex = i + 1
}).ToList();
}
如您所见,我试图从 LINQ 函数中获取索引并将其放入 NodeIndex 属性中。但它不是与其父级堆叠的。
这是输出
1. Customer Service
1. MalFunction
1. Host Failure
1. Contact Information
2. Models
3. OnSet
4. Other Service
5. Warranty
这是我所期待的
1. Customer Service
1.1. MalFunction
1.1.1. Host Failure
1.1.1.1. Contact Information
1.1.1.2. Models
1.1.1.3. OnSet
1.1.1.4. Other Service
1.1.1.5. Warranty
2. Blah Blah
2.1. Blah Blah
所以当涉及到递归时,我真的不知道如何从父级获取嵌套索引。与嵌套的 for 循环不同,我们可以简单地获取父级。
类似
for(var i)
for(var j)
for(var k)
console.log(i + '. ' + j + '. ' + k)
【问题讨论】:
标签: c# asp.net entity-framework linq recursion