第一种

直接实体添加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. 项目开发中的git简单使用

    原文地址: https://www.zhuyilong.fun/tech/the-blog-git.html 示例远程仓库地址: https://github.com/zhu-longge/gitWo ...

  2. 完全图的最短Hamilton路径——状压dp

    题意:给出一张含有n(n<20)个点的完全图,求从0号节点到第n-1号节点的最短Hamilton路径.Hamilton路径是指不重不漏地经过每一个点的路径. 算法进阶上的一道状压例题,复杂度为O ...

  3. C语言讲义——常量(constant)

    变量可以反复赋值:常量只能在定义时赋值,此后不得更改. 常量的定义需要加关键字const.如: #include <stdio.h> main() { const double PI=3. ...

  4. CentOS初级扫盲

    发行版介绍 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX(可移植操作系统接口Portable Operating System Interface ,缩写为 POSIX ...

  5. JZOJ2020年8月12日提高组反思

    JZOJ2020年8月12日提高组反思 真·难亿一点点 T1 题目长并附带伤害-- 暴力搜 对于字符串,我选择\(Pascal\) T2 概率问题,再见 T3 样例没懂,再见 T4 有史以来见过的条件 ...

  6. Spring Cloud 学习 (八) Spring Boot Admin

    Spring Boot Admin 用于管理和监控一个或者多个 Spring Boot 程序 新建 spring-boot-admin-server pom <parent> <ar ...

  7. 20190712_mysql执行sql脚本语句_Failed to open file_error

    要说执行sql脚本语句不难 就下面这条语句: 进入mysql安装目录下的bin目录 然后执行: \mysql –u用户名 –p密码 –D数据库<[sql脚本文件路径全名] 比如: C:\MySQ ...

  8. 使用PyQt(Python+Qt)+moviepy开发的视频截取、音视频分离、MP4转GIF动图工具免费下载分享

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 在因博文素材需要将软件操作制作成动画时,发现网上相关绿色使用工具都需要 ...

  9. 课堂练习之疫情APP

    title: 课堂练习之疫情查询APP date: 2020-03-17 20:08:51 tags: 在之前的体温记录APP上改进,只写出疫情信息查询页面的代码. 实体类与上篇博客SSM整合中的Ci ...

  10. 对网页接口的追踪探索(以b站通过bv号查询av号为例

    对网页接口的追踪探索(以b站通过bv号查询av号为例 序言 本文只提供一种探索网页加载时后端访问接口情况的思路,所举例子没有太大实际用处. 一 自2020年3月23日起,AV号将全面升级到BV号.但是 ...