C# 递归算法获取下级子级 2种方法
第一种
直接实体添加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种方法的更多相关文章
- Oracle中获取执行计划的几种方法分析
以下是对Oracle中获取执行计划的几种方法进行了详细的分析介绍,需要的朋友可以参考下 1. 预估执行计划 - Explain PlanExplain plan以SQL语句作为输入,得到这条S ...
- windows下获取IP地址的两种方法
windows下获取IP地址的两种方法: 一种可以获取IPv4和IPv6,但是需要WSAStartup: 一种只能取到IPv4,但是不需要WSAStartup: 如下: 方法一:(可以获取IPv4和I ...
- 获取$(this)子节点对象的方法
获取$(this)子节点对象的方法: 1.children()方法: children() 方法返回被选元素的所有直接子元素. 该方法只会向下一级对 DOM 树进行遍历. 2.find()方法: fi ...
- Java中获取键盘输入值的三种方法
Java中获取键盘输入值的三种方法 Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值 ...
- 通过PID获取进程路径的几种方法
通过PID获取进程路径的几种方法 想获得进程可执行文件的路径最常用的方法是通过GetModuleFileNameEx函数获得可执行文件的模块路径这个函数从Windows NT 4.0开始到现在的Vis ...
- PHP获取POST数据的几种方法汇总
一.PHP获取POST数据的几种方法 方法1.最常见的方法是:$_POST['fieldname']; 说明:只能接收Content-Type: application/x-www-form-urle ...
- JQuery this和$(this)的区别及获取$(this)子元素对象的方法
1.JQuery this和$(this)的区别 相信很多刚接触JQuery的人,很多都会对$(this)和this的区别模糊不清,那么这两者有什么区别呢? 首先来看看JQuery中的 $() 这 ...
- php 获取ip地址的5种方法,插入用户登录日志实例
php 获取ip地址的5种方法,插入用户登录日志实例,推荐使用第二种方法 <?php //方法1: $ip = $_SERVER["REMOTE_ADDR"]; echo $ ...
- 转: JQuery this和$(this)的区别及获取$(this)子元素对象的方法
1.JQuery this和$(this)的区别 相信很多刚接触JQuery的人,很多都会对$(this)和this的区别模糊不清,那么这两者有什么区别呢? 首先来看看JQuery中的 $() 这 ...
随机推荐
- 一分钟了解 sync、fsync、fdatasync 系统调用
目录 一.缓冲 二.延迟写的优缺点 三.sync.fsync.fdatasync 关注送书!<Netty实战>(今晚开奖) Hi,大家好!我是白日梦. 今天我要跟你分享的话题是:" ...
- Java基础教程——Socket编程
Socket通常也称作"套接字",用于描述IP地址和端口,可以用来实现不同虚拟机或不同计算机之间的通信. --百度百科 套接字允许应用程序插入到网络中,并与插入到网络中的其他应用程 ...
- 经典面试题解析:这道 C 编程面试题居然有如此多的解法!
问题描述 任意给定一个32位无符号整数n,求n的二进制表示中1的个数,比如n = 5(0101)时,返回2,n = 15(1111)时,返回4 这也是一道比较经典的题目了,相信不少人面试的时候可能遇到 ...
- mysql主从同步上---主从同步原理
1.主从同步机制 1.1 主从同步介绍和优点 在多台数据服务器中,分为主服务器和从服务器.一台主服务器对应多台从服务器. 主服务器只负责写入数据,从服务器只负责同步主服务器的数据,并让外部程序 ...
- CentOS6.5配置KVM
///确认cpu是否支持kvm egrep '(vmx|svm)' --color=always /proc/cpuinfo ///安装包 yum -y install qemu-kvm libvir ...
- Docker 与 Podman 容器管理的比较
翻译自 Paul Ferrill 2020年9月1日的文章<Compare Docker vs. Podman for container management> [1] Docker 和 ...
- moviepy音视频剪辑:使用rotate函数实现视频变换处理以及参数expand取值为True时的花屏问题解决方案
☞ ░ 前往老猿Python博文目录 ░ 一.rotate函数功能介绍 moviepy的rotate函数用于将剪辑逆时针旋转指定的角度或弧度. 调用语法:rotate(clip, angle, uni ...
- Python类知识学习时的部分问题
Python的富比较方法__eq__和__ne__之间的关联关系分析 Python的富比较方法__le__.ge__之间的关联关系分析 Python的富比较方法__lt.__gt__之间的关联关系分析 ...
- PyQt(Python+Qt)学习随笔:QTableView的showGrid属性
老猿Python博文目录 老猿Python博客地址 showGrid属性用于控制视图中数据项之间是否显示网格,如果该属性为True,则绘制网格:如果该属性为False,则不绘制网格. showGrid ...
- Python 装饰器(装饰器的简单使用)
简单介绍了装饰器的一些基本内容,包含定义.本质.原则.如何实现. 1.装饰器的定义 定义:一种增加函数功能的简单方法,可以快速地给不同的函数或类插入相同的功能. 简单点就是:高阶函数+嵌套函数 -&g ...