.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>();
}
评论