我有一个循环类(class) - 我在下面对其进行了简化。
public class SiloNode
{
public string Key { get; private set; }
public string Url { get; private set; }
public List<SiloNode> Children { get; private set; }
}
尽管理论上它可以永远嵌套,但节点只会下降两层。所以,顶级节点可以有 child ,但 child 不能有 child 。
我有一个包含所有顶级节点及其嵌套子节点的主列表。
但是,我需要将所有节点放入一个平面列表中 - 节点 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
,只需连接单亲及其 child :
List<SiloNode> newList = masterList.SelectMany(n => new[]{ n }.Concat(n.Children)).ToList();
关于c# - 使用 Linq 展平嵌套列表而不是 foreach 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52187650/