c#从邻接树中排序数据

我有一堆数据将表示为树。 我正在使用的控件要求正确排序数据。

这是每个节点的结构:

public class TreeNode { public Guid id { get; set; } public string name { get; set; } public int level { get; set; } public Guid? parent { get; set; } public bool isLeaf { get; set; } } 

我需要一种方法来对数据进行排序,以便我有一个TreeNodes列表,其中首先是root用户,然后是子节点,依此类推。 换句话说,所有直接孩子都需要跟随列表中的父母。

我还想按名称对子节点和叶节点进行排序。 ( > =可扩展, o =叶)

 root > level1a > level1b > level2d > level2a o level1a o level1b o 

是否有捷径可寻?

我假设我需要一些递归函数,并且不能使用order by语句的组合对它进行排序(类似于list.OrderBy(x => x.parent).ThenBy(x => x.level).ThenBy(x => x.isLeaf);

你用一个LINQ表达式来做这件事是不正确的。 这种递归方法应该可以解决问题:

 IEnumerable TreeOrder( IEnumerable nodes) { //Find the root node var root = nodes.Single(node => node.parent == null); //Build an inverse lookup from parent id to children ids var childrenLookup = nodes .Where(node => node.parent != null) .ToLookup(node => node.parent.Value); return TreeOrder(root, childrenLookup); } IEnumerable TreeOrder( TreeNode root, ILookup childrenLookup) { yield return root; if (!childrenLookup.Contains(root.id)) yield break; foreach (var child in childrenLookup[root.id]) foreach (var node in TreeOrder(child, childrenLookup)) yield return node; }