我有一个经常性的课程 - 我在下面简化了它。
public class SiloNode
{
public string Key { get; private set; }
public string Url { get; private set; }
public List<SiloNode> Children { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
尽管从理论上讲,它可以永远嵌套,但节点只会向下两层。因此,顶级节点可以有子节点,但子节点不能有子节点。
我有一个主列表,其中包含所有顶级节点及其嵌套子节点。
但是,我需要将所有节点放入一个平面列表中 - 节点 1,然后是它的子节点,然后是节点 2 等。
我在这方面的知识有限,但我可以做一些事情,比如foreach遍历主列表并创建一个新列表,如下所示:
public IEnumerable<SiloNode> GetLinks(IEnumerable<SiloNode> masterList)
{
var newList = new List<SiloNode>();
foreach (var node in masterList)
{
newList.Add(node);
newList.AddRange(node.Children);
}
return newList;
}
Run Code Online (Sandbox Code Playgroud)
但是,我知道可能有更好的方法,但我只是不知道如何将其转换foreach为Linq执行相同操作的语句。换句话说,一起选择父项及其子项。
任何帮助表示赞赏。
您可以使用SelectMany,只需连接单亲及其孩子:
List<SiloNode> newList = masterList.SelectMany(n => new[]{ n }.Concat(n.Children)).ToList();
Run Code Online (Sandbox Code Playgroud)