从平面列表创建层次结构

时间:2015-02-11 12:33:24

标签: c# .net linq

我必须从平面列表中构建一个n级层次结构列表。

我试图在这个答案中使用解决方案:https://stackoverflow.com/a/25532561但我未能得到正确的结果。

这是我的对象结构:

public class Group {
   public string Id { get; set; }
   public string Name { get; set; }
   public string ParentId { get; set; }
   public List<Group> Children { get; set; }
}

public List<Group> BuildGroupHierarchy(List<Group> groups)
        {
            var lookup = groups.Where(x => x.ParentId != null).ToList().ToLookup(c => c.ParentId);

            List<string> idsToRemove = new List<string>();
            foreach (var c in groups)
            {
                if (c.Children == null) c.Children = new List<Group>();

                if (lookup.Contains(c.Id))
                    c.Children.AddRange(lookup[c.Id].ToList());
            }

            return groups;
        }

这是平面结构中存在的虚拟层次结构:

  • 第1组
    • 第1-1组
  • 第2组
    • 2-1组
      • 第2-1-1组
    • 第2-2组

但这是我得到的,基本上是第二级重复:

  • 第1组
    • 第1-1组
  • 第2组
    • 2-1组
      • 第2-1-1组
    • 第2-2组
  • 2-1组
    • 第2-1-1组

0 个答案:

没有答案