我有一个定期上课的课程-我在下面进行了简化。
public class SiloNode
{
public string Key { get; private set; }
public string Url { get; private set; }
public List<SiloNode> Children { get; private set; }
}
尽管从理论上讲,它可以永远嵌套,但节点只会下降两个级别。因此,顶级节点可以有一个孩子,但是一个孩子不能有孩子。
我有一个主列表,其中包含所有顶级节点及其嵌套的子节点。
但是,我需要将所有节点放入一个平面列表中-节点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;
}
但是,我知道可能有更好的方法,但是我无法弄清楚如何将
foreach
转换为将执行相同操作的Linq
语句。换句话说,一起选择父级及其子级。任何帮助表示赞赏。
最佳答案
您可以使用SelectMany
,只需连接单亲及其孩子即可:
List<SiloNode> newList = masterList.SelectMany(n => new[]{ n }.Concat(n.Children)).ToList();