我有一个像这样的分层数据列表:
var list = new List<Data>(){some data...}
class Data
{
public int number;
public List<Data> info;
}
Run Code Online (Sandbox Code Playgroud)
注意:树叶中的数据 - >info = null
例:
数字是number property数据类
--1
--11
--2
--21
--22
--23
--24
--3
--31
--32
--321
--322
--4
--41
--42
Run Code Online (Sandbox Code Playgroud)
如何通过linq查询(非递归方法或for循环)知道树的最大深度到数据列表?
在此示例中,321,322的最大级别为3
谢谢.
LINQ 和 SQL 在平面数据结构上运行;它们不是为递归数据结构设计的。
对于 LINQ to Entities,我相信您不走运。将子树的深度存储在每个节点中,并在插入/删除节点时递归更新它。
使用 LINQ to Objects,您可以定义一个递归扩展方法,该方法返回树中的所有路径并获取最长路径的长度:
var result = root.Paths().Max(path => path.Length);
Run Code Online (Sandbox Code Playgroud)
在哪里
public static IEnumerable<Data[]> Paths(this Data data)
{
return Paths(data, new[] { data });
}
private static IEnumerable<Data[]> Paths(Data data, Data[] path)
{
return new[] { path }.Concat((data.info ?? Enumerable.Empty<Data>())
.SelectMany(child => Paths(child, path.Concat(new[] { child }).ToArray())));
}
Run Code Online (Sandbox Code Playgroud)