递归在IT行业中常常用于构建复杂的树形数据结构,尤其是在菜单导航、文件系统和数据库查询等场景中。在这个示例代码中,开发者正在处理一个关于企业类型(Equ_Type)的数据表,每个类型有父类型(ParentId)和子类型(childrens),目的是将这些关系转化为树形菜单,方便用户浏览和理解层次结构。 首先,代码定义了两个列表,`parents`和`childrens`,分别用于存储父节点和子节点。`parents`通过筛选出ParentId为0或null的记录,因为根节点没有父节点,而`childrens`则筛选出所有具有非零或非null ParentId的记录,即所有子节点。 在`foreach`循环中,对于每个父节点模型(`model`),创建一个新的`EquTypeTreept`对象(可能是一个自定义的树形结构类),并设置其属性:标题(title)、是否为叶子节点(isLeaf,初始值为false,表示不是叶子节点)、是否展开(expanded,初始值为true,表示默认展开),以及关键ID(key)和父节点ID(ParentId)。然后,这个新创建的对象被添加到结果列表`result`中。 接着,调用了一个名为`AddMenu`的方法,传入子节点列表`childrens`和当前父节点模型的ID,这可能是为了进一步递归地处理子节点,将其添加到父节点的子菜单中,形成完整的树形结构。 `CKTree`方法的作用类似于`EquTypeTreept`的构建,但这里的数据源是`db.Equ_Type.Where(p=>p.Status==1).ToList()`,它过滤出Status为1的状态有效的企业类型。同样,先将根节点添加到结果列表中,然后使用递归逻辑处理子节点。 整个过程的核心是递归思想,通过反复调用自身,逐层遍历并构建树形结构,直到所有节点都被包含在内。这种算法在处理大型数据集时非常实用,因为它避免了一次性加载所有层级,而是按需加载,节省了内存资源。最后返回的`BaseResultT<EquTypeCKTree>`包含了完整的树形数据,便于后续的展示和操作。
childrens = list.Where(p => p.ParentId > 0).ToList();
foreach (var model in parents)
{
EquTypeTree pt = new EquTypeTree();
pt.title = model.EName;
pt.isLeaf = false;
pt.expanded = true;
pt.key = model.IId;
pt.ParentId = model.ParentId;
result.Add(pt);
AddMenu(childrens, pt, model.IId);
}
public BaseResultT<EquTypeCKTree> CKTree()
{
BaseResultT<EquTypeCKTree> fResult = new BaseResultT<EquTypeCKTree>();
fResult.DataContent = new List<EquTypeCKTree>();
List<EquTypeCKTree> result = new List<EquTypeCKTree>();
var list = db.Equ_Type.Where(p => p.Status == 1).ToList();
List<Equ_Type> parents = new List<Equ_Type>();
List<Equ_Type> childrens = new List<Equ_Type>();
parents = list.Where(p => p.ParentId == 0 || p.ParentId == null).ToList();
childrens = list.Where(p => p.ParentId > 0).ToList();
foreach (var model in parents)
{
EquTypeCKTree pt = new EquTypeCKTree();
pt.label = model.EName;
pt.Prefix = model.Prefix1;
下载后可阅读完整内容,剩余1页未读,立即下载
- 粉丝: 5
- 资源: 61
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦