.net / C# 三行代码解决线性转树形结构 无限层级

简介对关系型数据表中的线性结构数据转换成树形结构。

​ ​ 想把数据表中的“菜单”转换成前端使用的树形结构数据,使用递归的方式又觉得啰嗦,在网上搜了下,果然有高手,实现方式也非常简单,实在是佩服。

​ ​ 根据网上的实现逻辑,优化了下代码,基本三方代码搞定。

主要代码:

	foreach (var menu in list)
            {
                var model = list.FirstOrDefault(f => f.Id == menu.PId);
                    model?.Children.Add(menu);
            }
            var result = list.Where(t => t.PId == 0).ToList();

​ ​ 或者是

foreach (var menu in list)
            {
                menu.Children = list.Where(m => m.PId == menu.Id).ToList();
            }
          
            var result = list.Where(t => t.PId == 0);

​ ​ 更简单的

var temp = list.Select(m => m.Children = list.Where(c => c.PId == m.Id).ToList());
            var result = list.Where(t => t.PId == 0);

其中,list 是 menu的数据集合, result 便是得到的树形结构数据。、

Menu类结构

    public class Menu
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int PId { get; set; }
        public List<Menu> Children { get; set; } = new List<Menu>();
    }

本站发布的文章受知识共享协议保护,转载、收录请标明出处。

评论


昵称:   邮箱:

Top
An error has occurred. This application may no longer respond until reloaded.Reload 🗙