第一种

直接实体添加Children

实体类
public class DepartmentItem
{
/// <summary>
/// 部门Id
/// </summary>
public int ID { get; set; }
/// <summary>
/// 部门名称
/// </summary>
public string DepartmentName { get; set; }
/// <summary>
/// 上级部门Id
/// </summary>
public int? ParentSysDepartmentId { get; set; }
/// <summary>
/// 企业Id
/// </summary>
public int SysEnterpriseId { get; set; }
/// <summary>
/// 部门GUID
/// </summary>
public string DepartmentGUID { get; set; }
     //下级
public IEnumerable<DepartmentItem> Children { get; set; }
}
方法
private List<DepartmentItem> GetChildren(IEnumerable<DepartmentItem> dt, int? ID)
{
List<DepartmentItem> nodeList = new List<DepartmentItem>();
var children = dt.Where(q => q.ParentSysDepartmentId == ID);
foreach (var dr in children)
{
DepartmentItem node = new DepartmentItem();
node.ID = dr.ID;
node.DepartmentGUID = dr.DepartmentGUID;
node.SysEnterpriseId = CurrentUser.PlatformUser.userEnterInfo.EnterpriseId;
node.DepartmentName = dr.DepartmentName;
node.ParentSysDepartmentId = dr.ParentSysDepartmentId;
node.Children = GetChildren(dt, node.ID);
nodeList.Add(node);
}
return nodeList;
}
直接调用
var tt = GetChildren(apire.Data,null);

第二种

依次返回数据 根据RLevel级别判断

/// <summary>
/// 行政区域表
/// </summary>
public class ProJ_Region :BaseModelInt
{
/// <summary>
/// 上一级id
/// </summary>
public int ParentID { get; set; }
/// <summary>
/// 工程项目ID
/// </summary>
public Guid ProjectID { get; set; }
/// <summary>
/// 行政区域名
/// </summary>
public string RegionName { get; set; }
/// <summary>
/// 级次
/// </summary>
public int RLevel { get; set; }
}
/// <summary>
/// 获取包含自己的子级
/// </summary>
/// <param name="regionid"></param>
/// <returns></returns>
public IEnumerable<Model.DB.ProJ_Region> GetChildren(int regionid)
{
if (!_region.Contains(q => q.ID == regionid))
yield break;
foreach (var x in _region.Get(q => q.ID == regionid))
yield return x;
foreach (var x in _region.Get(q => q.ParentID == regionid))
{
foreach (var y in GetChildren(x.ID))
yield return y;
} }
var re = GetChildren(RegionID);

C# 递归算法获取下级子级 2种方法的更多相关文章

  1. Oracle中获取执行计划的几种方法分析

    以下是对Oracle中获取执行计划的几种方法进行了详细的分析介绍,需要的朋友可以参考下     1. 预估执行计划 - Explain PlanExplain plan以SQL语句作为输入,得到这条S ...

  2. windows下获取IP地址的两种方法

    windows下获取IP地址的两种方法: 一种可以获取IPv4和IPv6,但是需要WSAStartup: 一种只能取到IPv4,但是不需要WSAStartup: 如下: 方法一:(可以获取IPv4和I ...

  3. 获取$(this)子节点对象的方法

    获取$(this)子节点对象的方法: 1.children()方法: children() 方法返回被选元素的所有直接子元素. 该方法只会向下一级对 DOM 树进行遍历. 2.find()方法: fi ...

  4. Java中获取键盘输入值的三种方法

    Java中获取键盘输入值的三种方法     Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值 ...

  5. 通过PID获取进程路径的几种方法

    通过PID获取进程路径的几种方法 想获得进程可执行文件的路径最常用的方法是通过GetModuleFileNameEx函数获得可执行文件的模块路径这个函数从Windows NT 4.0开始到现在的Vis ...

  6. PHP获取POST数据的几种方法汇总

    一.PHP获取POST数据的几种方法 方法1.最常见的方法是:$_POST['fieldname']; 说明:只能接收Content-Type: application/x-www-form-urle ...

  7. JQuery this和$(this)的区别及获取$(this)子元素对象的方法

    1.JQuery this和$(this)的区别 相信很多刚接触JQuery的人,很多都会对$(this)和this的区别模糊不清,那么这两者有什么区别呢? 首先来看看JQuery中的  $()  这 ...

  8. php 获取ip地址的5种方法,插入用户登录日志实例

    php 获取ip地址的5种方法,插入用户登录日志实例,推荐使用第二种方法 <?php //方法1: $ip = $_SERVER["REMOTE_ADDR"]; echo $ ...

  9. 转: JQuery this和$(this)的区别及获取$(this)子元素对象的方法

    1.JQuery this和$(this)的区别 相信很多刚接触JQuery的人,很多都会对$(this)和this的区别模糊不清,那么这两者有什么区别呢? 首先来看看JQuery中的  $()  这 ...

随机推荐

  1. ucore操作系统学习(五) ucore lab5用户进程管理

    1. ucore lab5介绍 ucore在lab4中实现了进程/线程机制,能够创建并进行内核线程的调度.通过上下文的切换令线程分时的获得CPU,使得不同线程能够并发的运行. 在lab5中需要更进一步 ...

  2. Java基础教程——Jshell

    Jshell 从java9开始,java提供Jshell工具,可以输入代码片段并马上看到运行结果. 对于简单的Java语句测试,不需要新建文件,编译,运行了 Microsoft Windows [版本 ...

  3. (在模仿中精进数据可视化05)疫情期间市值增长top25公司

    本文完整代码及数据已上传至我的Github仓库https://github.com/CNFeffery/FefferyViz 1 简介 新冠疫情对很多实体经济带来冲击的同时,也给很多公司带来了新的增长 ...

  4. 生僻的mysql

    1.show table status like 'user' 2.alter table mytableEngine=InnoDB 需要执行很长时间,mysql会按行将数据从原表复制到一张新的表中, ...

  5. redis 五大数据类型使用

    redis 五大数据类型使用 字符串str 单个值 127.0.0.1:6379> set name pp # 设置键值[O(1)] OK 127.0.0.1:6379> setex na ...

  6. 第一次个人编程作业:我的分数我做主 - 软件工程与 UML

    博客班级 https://edu.cnblogs.com/campus/fzzcxy/2018SE1 作业要求 https://edu.cnblogs.com/campus/fzzcxy/2018SE ...

  7. Python【内置函数】、【装饰器】与【haproxyf配置文件的修改】

    内置函数 •callable,检查是否能被执行/调用 def f1(): pass f2 = 123 print(callable(f1)) #输出 print(callable(f2)) #输出 T ...

  8. PP-OCR论文翻译

    译者注: 我有逛豆瓣社区的习惯,因此不经意间会看到一些外文翻译成中文书的评价."书是好书,翻译太臭"."中文版别看"."有能力尽量看原版". ...

  9. 第11.22节 Python 中re模块的字符串分割器:split函数

    一. 引言 在<第11.2节 Python 正则表达式支持函数概览>介绍了re模块的主要函数,在<第11.3节 Python正则表达式搜索支持函数search.match.fullm ...

  10. PyQt(Python+Qt)学习随笔:model/view架构中支持QListView列表中展示图标的两种方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在QListView列表视图中的项不但可以展示文字,也可以展示图标和复选框,同时可以指定项是否可以拖 ...