第一种

直接实体添加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. python应用(2):写个python程序给自己用

    用python写一个程序,然后在命令行上执行,看不到界面(UI),这种程序很常见了,叫命令行程序.然而很多人,特别是不懂程序的人,更需要看到的是一个有界面的,能通过鼠标操作的程序,毕竟已经迈进&quo ...

  2. mq内存映射

    MappedFileQueue的封装 MappedFileQueue是MappedFile的管理容器,MappedFileQueue是对存储目录的封装. 查找MappedFile: 1.根据时间戳来查 ...

  3. Oracle11gR2 sqlplus中可以执行上键查询backspace删除

    1.1 sqlplus中可以执行上键查询backspace删除 1.1.1 上键查询 方法1: 安装源-导入key-安装rpm包-进入配置文件修改参数 rpm -ivh http://download ...

  4. harbor私有仓库部署

    Harbor 简介     Harbor是构建企业级私有docker镜像的仓库的开源解决方案,它是Docker Registry的更高级封装,它除了提供友好的Web UI界面,角色和用户权限管理,用户 ...

  5. 六. Vue CLI详解

    1. Vue CLI理解 1.1 什么是Vue CLI 如果你只是简单写几个Vue的Demo程序, 那么你不需要Vue CLI,如果你在开发大型项目那么你需要它, 并且必然需要使用Vue CLI. 使 ...

  6. C#(二)基础篇—操作符

    2020-12-02 本随笔为个人复习巩固知识用,多从书上总结与理解得来,如有错误麻烦指正 1.数学操作符 int a=2,b=3,c=0; float d=0; c=a+b; //c=5 c++; ...

  7. moviepy音视频剪辑:颜色相关变换函数blackwhite、colorx、fadein/out、gamma_corr、invert_colors、lum_contrast、mask_color介绍

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 在<moviepy音视频剪辑:moviepy中的剪辑基类Clip详解>介绍了剪辑基类的fl.fl_time.fx方法,在<movi ...

  8. 在Python中使用moviepy进行视频剪辑时输出文件报错 ‘NoneType‘ object has no attribute ‘stdout‘问题

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 movipy输出文件时报错 'NoneType' ...

  9. 第14.9节 Python中使用urllib.request+BeautifulSoup获取url访问的基本信息

    利用urllib.request读取url文档的内容并使用BeautifulSoup解析后,可以通过一些基本的BeautifulSoup对象输出html文档的基本信息.以博文<第14.6节 使用 ...

  10. 一台电脑上同时安装python2和python3

    被python2的编码问题整的快晕了,python3对编码问题解决的不错 所以想安装下python3,但由于目前企业大多还是用python2,所以不想卸载2,让python2和python3共存. 本 ...