C#生成树形结构泛型类,使用方法: ToTree<ShowMessageUpdatesTableTreeViewModel>.ToDo(models)

public class ToTree<T> where T : IToTreeModel
{
public static List<T> ToDo(List<T> models)
{
var dtoMap = new Dictionary<int, T>();
foreach (var item in models)
{
dtoMap.Add(item.Id, item);
}
List<T> result = new List<T>();
foreach (var item in dtoMap.Values)
{
if (item.ParentId == )
{
result.Add(item);
}
else
{
if (dtoMap.ContainsKey(item.ParentId))
{
dtoMap[item.ParentId].AddChilrden(item);
}
}
}
return result;
}
}

实体类必须实现接口:

public interface IToTreeModel
{
int Id { get; set; }
int ParentId { get; set; }
List<IToTreeModel> children { get; set; }
void AddChilrden(IToTreeModel node);
}

实体类实例:

    public class ShowMessageUpdatesViewModel: IToTreeModel
{
public int Id { get; set; }
public int ParentId { get; set; }
public string Name { get; set; }
public List<IToTreeModel> children { get; set; }
public void AddChilrden(IToTreeModel node)
{
if (children == null)
children = new List<IToTreeModel>();
this.children.Add(node);
}
}

最新文章

  1. MySQL 导入数据
  2. 跟着百度学PHP[6]超级全局变量
  3. ASP.NET页面优化,提高载入速度[转]
  4. SQL 标量函数-----日期函数datediff()、 day() 、month()、year()
  5. Bootstrap 3支持IE 8遇到的一个小问题
  6. C#&amp;java重学笔记(变量与操作符)
  7. leetcode:Summary Ranges
  8. EF调用存储过程
  9. SGU 199 Beautiful People(DP+二分)
  10. BZOJ 1012 最大数
  11. .NET基础拾遗(5)反射2
  12. Struts2 请求参数接收
  13. android在桌面弹出一个窗口
  14. 一次完整的HTTP请求所经历的7个步骤(前三步是浏览器工作,后四步是服务器工作)
  15. 纯Lambda实现斐波那契数列
  16. 6.1熟知tsung.xml配置文件(翻译)
  17. 【1414软工助教】团队作业6——展示博客(Alpha版本) 得分榜
  18. 论文泛读&#183;Adversarial Learning for Neural Dialogue Generation
  19. Vue2 学习笔记1
  20. 潭州课堂25班:Ph201805201 爬虫高级 第十二 课 Scrapy-redis分布 项目实战 (课堂笔记)

热门文章

  1. Ubuntu安装ssh 与samba
  2. Sql Server查看死锁及堵塞脚本
  3. TCP/IP学习20180710-数据链路层-ICMP协议
  4. 学习笔记《Java多线程编程实战指南》三
  5. 7.6.2 break 语句
  6. CSS3 之 Media(媒体查询器)
  7. Centos7开机启动自己的脚本的方法
  8. jmeter向ActiveMQ发送消息_广播/订阅(Topics 队列)
  9. 乘法DAC一点知识
  10. sql server top 10 IO性能查询