C# .NET List转树形结构通用方法帮助类
树形对象作为父类
/// <summary>
/// 树形对象
/// </summary>
public abstract class TreeObejct<T>
{
/// <summary>
/// ID
/// </summary>
public Guid Id { set; get; }
/// <summary>
/// 父ID
/// </summary>
public Guid ParentId { set; get; }
/// <summary>
/// 子集
/// </summary>
public IList<T> Children = new List<T>();
}
自定义类型继承TreeObejct父类
/// <summary>
/// MenuMeta
/// </summary>
public class MenuMeta : TreeObejct<MenuMeta>
{
/// <summary>
/// 标题
/// </summary>
public string Title { get; set; }
/// <summary>
/// 图标
/// </summary>
public string Icon { get; set; }
}
树形转换方法
/// <summary>
/// 树形结构类
/// </summary>
public static class TreeHelper
{
/// <summary>
/// 递归方式转树形
/// </summary>
/// <typeparam name="T">泛型</typeparam>
/// <param name="list">集合</param>
/// <returns></returns>
public static IList<T> ToTreeRecursion<T>(this IList<T> list) where T : TreeObejct<T>
{
var newList = list.Where(p => p.ParentId == Guid.Empty).ToList();
foreach (var item in newList)
{
item.Children = GetChildrens(list, item);
}
return newList;
}
/// <summary>
/// 递归子集
/// </summary>
/// <typeparam name="T">泛型</typeparam>
/// <param name="list">集合</param>
/// <param name="node">节点</param>
/// <returns></returns>
private static IList<T> GetChildrens<T>(IList<T> list, T node) where T : TreeObejct<T>
{
IList<T> childrens = list.Where(p => p.ParentId == node.Id).ToList();
foreach (var item in childrens)
{
item.Children = GetChildrens(list, item);
}
return childrens;
}
}
使用示例:
//数据
IList<MenuMeta> list = new List<MenuMeta>();
//
//此处为list集合赋值
//
//转为树形结构
var treeList = list.ToTreeRecursion();