用递归形成树结构数据

定义一个树形实体 

        public class orgTrees{public orgTrees(){this.Children = new List<orgTrees>();}public int Id { get; set; }public int FatherId { get; set; }public string Name { get; set; }public int Lever { get; set; }public bool HasChildren { get; set; }public string OrgCode;public int OrgType;public List<orgTrees> Children { get; set; }}

开始递归方法

 1         /// <summary>
 2         /// 获取组织层级树
 3         /// </summary>
 4         /// <returns></returns>
 5         public AjaxResponse<orgTrees> GetOrgTrees()
 6         {
 7             var list = new List<orgTrees>();
 8             var orgLayerList = _organizeProxy.ListOrgInfoForManage();
 9             
10             var dic = new Dictionary<int, orgTrees>(orgLayerList.Count);
11             foreach (var item in orgLayerList)
12             {
13                 dic.Add(item.Info.Id, new orgTrees
14                 {
15                     Id = item.Info.Id,
16                     FatherId = item.Info.FatherId,
17                     Name = item.Info.Name.GetValueByLanId(WorkContext.WorkingLanguage.Id),
18                     Lever = item.Layer,
19                     OrgCode = item.Info.OrgCode,
20                     OrgType = item.Info.OrgType,
21                 });
22             }
23 
24             //根节点
25             var rootNode = orgLayerList.Where(x => x.Info.FatherId.Equals(-1)).First();
26             var model = new orgTrees();
27             model.Id = rootNode.Info.Id;
28             model.FatherId = rootNode.Info.FatherId;
29             model.Name = rootNode.Info.Name.GetValueByLanId(WorkContext.WorkingLanguage.Id);
30             model.Lever = rootNode.Layer;
31             model.OrgCode = rootNode.Info.OrgCode;
32             model.OrgType = rootNode.Info.OrgType;
33             model.HasChildren = rootNode.HasChildren;
34             CreatTree(model.Id, model, orgLayerList);
35             return new AjaxResponse<orgTrees>(model);
36         }
37         //生成树的方法
38         public void CreatTree(int parentId, orgTrees tree, LayerList<OrganizeInfo> laerList)
39         {
40             //获取子节点
41             var childrenNode = laerList.ToList().FindAll(x => x.Info.FatherId == Convert.ToInt32(parentId));
42             //如果没有字节点了,那就返回空
43             if (childrenNode.Count == 0) return;
44             List<orgTrees> nodeTrees = new List<orgTrees>();
45             for (int i = 0; i < childrenNode.Count; i++)
46             {
47                 orgTrees node = new orgTrees();
48                 node.Id = childrenNode[i].Info.Id;
49                 node.Name = childrenNode[i].Info.Name.GetValueByLanId(WorkContext.WorkingLanguage.Id);
50                 node.FatherId = childrenNode[i].Info.FatherId;
51                 node.Lever = childrenNode[i].Layer;
52                 node.OrgCode = childrenNode[i].Info.OrgCode;
53                 node.OrgType = childrenNode[i].Info.OrgType;
54                 node.HasChildren = childrenNode[i].HasChildren;
55                 //递归
56                 CreatTree(childrenNode[i].Info.Id, node, laerList);
57                 nodeTrees.Add(node);
58             }
59             tree.Children = nodeTrees; //由于对象是引用类型,因为可以改变参数的值
60         }

说下思路就是 先把根节点找出来,然后寻找根节点的子节点 然后递归循环子节点,寻找子节点的子节点

最后生成的是就是 

转载于:https://www.cnblogs.com/dzhengyang/p/8515826.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398573.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络爬虫(一)——爬虫及其实现

文章目录1.1 爬虫概述1.1.3 网络爬虫和浏览器的区别1.1.2 网络爬虫的定义1.2 requests请求库1.2.1 requests基本概念1.2.2 疫情数据爬取1.2.3 get请求1.2.4 headers请求头1.2.5 Cookies验证1.3 Beautiful Soup解析库1.3.1 安装1.3.2 对象的创建1.3.3 find方法1.3.4 后话1.4 正则…

C# winform 窗体怎么隐藏标题栏,不显示标题栏

//没有标题 this.FormBorderStyle FormBorderStyle.None; //任务栏不显示 this.ShowInTaskbar false;转载于:https://www.cnblogs.com/qq260250932/p/4230472.html

sqL编程篇(三) 游标与存储过程

sql编程2 游标与存储过程 sql编程中的游标的使用&#xff1a;提供的一种对查询的结果集进行逐行处理的一种方式不用游标的处理解决方式&#xff1a;逐行修改工资update salar set 工资‘新工资’ where 雇员号0101 //通过查出雇员号而修改工资过程&#xff1a;1.定义一个游标&a…

python爬虫从入门到精通

第一讲 什么是爬虫 网络蜘蛛&#xff08;Web spider&#xff09;也叫网络爬虫&#xff08;Web crawler&#xff09;&#xff0c;蚂蚁&#xff08;ant&#xff09;&#xff0c;自动检索工具&#xff08;automatic indexer&#xff09;&#xff0c;或者&#xff08;在FOAF软件概念…

Windows五种IO模型性能分析和Linux五种IO模型性能分析

Windows五种IO模型性能分析和Linux五种IO模型性能分析 http://blog.csdn.net/jay900323/article/details/18141217 http://blog.csdn.net/jay900323/article/details/18140847 重叠I/O模型的另外几个优点在于&#xff0c;微软针对重叠I/O模型提供了一些特有的扩展函数。当使用重…

C++从0到1的入门级教学(十一)——友元

文章目录11 友元11.1 全局函数做友元11.2 友元类11.3 成员函数做友元11 友元 让我们引入一个例子来讲述友元是什么。 生活中你的家有客厅&#xff0c;有卧室&#xff0c;客厅所有来的客人都可以进去&#xff0c;但是你的卧室是私有的。对于认识的人来说你可以允许它进去&…

KeyMob:为国内应用开发者管理的广告聚合平台

为什么80%的码农都做不了架构师&#xff1f;>>> 应用开发者在应用中嵌入广告SDK的来源主要包括两种&#xff1a;使用移动广告平台与移动广告聚合平台。国内有多少家提供移动广告管理的平台&#xff1f;据统计&#xff0c;这两个版本&#xff0c;已经有四五十家。虽…

模拟航班查询及预定系统 编写示例

一、建立C#窗体 所需控件&#xff1a; Label标签 Button 按钮 TextBox 文本框 ComboBox 组合框 DATaGridView 数据显示 DateTimePicker 日期表 NumericUpDown 数字选择 二、建立后台数据库 大概需要四张表 1&#xff0c;航空公司表 2&#xff0c;城市信息表 3&#xff0c;航班…

package

package转载于:https://www.cnblogs.com/wangweiabcd/p/4232646.html

数据结构杂谈(七)——串

文章目录7 串7.1 基本知识7.1.1 串的定义:rose:定义:rose:各种概念:rose:字符串和线性表的区别7.1.2 串的抽象类型数据定义7.1.3 串的比较:rose:原理7.2 串的存储结构:rose:7.2.1串的顺序存储:rose:7.2.2 串的链式存储7.3 基本操作:rose:7.3.1 返回子串操作:rose:7.3.2 比较操作…

牛刀小试Oracle之ORACLE 11GR2 RAC安装配置--检测GI软件是否正常(三)

1. 切换至grid用户[rootZracnode1 ~]# su - grid2.查看CRS状态(目前Oracle11GR2官方文档&#xff0c;不建议用如下命令检测了&#xff0c;等我有时间在整理补充)[gridZracnode1 ~]$ crs_stat -tName Type Target State Host ---------------…

PHP十六个魔术方法

PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods)&#xff0c;这些方法在PHP中充当了举足轻重的作用。 魔术方法包括&#xff1a; __construct()&#xff0c;类的构造函数__destruct()&#xff0c;类的析构函数__call()&#xff0c;在对象中调用一个不可访问方法时…

Linux实现的IEEE 802.q VLAN

本文转载自&#xff1a; http://blog.chinaunix.net/uid-20786208-id-4291059.html Technorati 标签: Linux VLAN--------------------------我是快乐的分割线-------------------------------------------------- 第一部分&#xff1a;VLAN的核心概念 说起IEEE 802.1q&#xf…

C++从0到1的入门级教学(十二)——运算符重载

文章目录12 运算符重载12.1 加法运算符重载12.2 左移运算符重载12.2.1 演示与说明12.2.2 常见的友元使用&#xff1a;重载>>运算符12.3 递增运算符重载12.4 赋值运算符重载12.5 关系运算符重载12.6 函数调用运算符重载12 运算符重载 在本讲中&#xff0c;我们会设计到一…

IntelliJ IDEA 显示行号方法

为何N多人问这问题&#xff0c;设置方法如下&#xff1a;File->Settings->Editor->General->Appearence->Show Line Number

python项目构建工具zc.buildout

转载&#xff1a;http://blog.csdn.net/u011630575/article/details/52940099 buildout简介 Buildout 是一个基于Python的构建工具, Buildout 主要是为了解决两个问题: 中心化的应用组装和部署重复的从Python软件发布中组装项目通过一个配置文件 buildout.cfg , 可以从多个部分…

C++从0到1的入门级教学(十三)——继承

文章目录13 继承13.1 继承的基本语法13.2 继承方式13.3 继承的对象模型13.4 继承中构造和析构顺序13.5 继承同名成员处理方式13.6 继承同名静态成员处理方式13.7 多继承语法13.8 菱形继承13 继承 继承是面向对象三大特性之一。有些类和类之间存在特殊的关系&#xff0c;如下图…

书评 – 程序员经典读物(1)

早几天&#xff0c;笼统地就经典感慨了一番&#xff0c;接着来个逐一点评&#xff0c;算是有始有终了。经典是用来阅读而非膜拜的道理&#xff0c;自然是明白的&#xff0c;虽然我是属于比较推崇经典那一类的。阅读大致就是一个和作者交流的过程&#xff0c;有兴致时无妨感慨点…

ubuntu安装环境软件全文档

1,安装apace2: sudo apt-get install apache2 2谷歌浏览器的安装&#xff1a;sudo apt-get install chromium-browser-dbg 3&#xff0c;国际版QQ下载&#xff1a;http://pan.baidu.com/s/1nt1Nu6P 根据自己的安装的32位或者是64位来下载。 安装的时候按照文件顺序安装就好了…

线性代数(二)

2 解线性方程组 1 Ax b的列图像实质是A的列向量有各种线性组合&#xff0c;b为其中的一种组合结果。 2 Ax b可以写为Axx1a1...xnanbAx x_1a_1...x_na_n bAxx1​a1​...xn​an​b&#xff0c;其中a1,a2...ana_1,a_2...a_na1​,a2​...an​为A中的列向量。 3 当Ax 0时&#…