C# 使用递归获取所有下属、所有子部门……
本例中获取的是所有的晚辈!首先定义家庭成员类:
public class FamilyMember
{
/// <summary>
/// 身份
/// </summary>
public string identity { get; set; }
public int level { get; set; }
/// <summary>
/// 父亲
/// </summary>
public string father { get; set; }
}
然后,定义递归方法:
/// <summary>
/// 递归获取晚辈
/// </summary>
/// <param name="members"></param>
/// <param name="m"></param>
/// <returns></returns>
public static List<FamilyMember> GetYoungers(List<FamilyMember> members, FamilyMember m)
{
var result = new List<FamilyMember>(); //获取子女
var subordinate = members.Where(e => e.father == m.identity).ToList(); //如果存在子女
if (subordinate != null)
{
result.AddRange(subordinate);
foreach (var subo in subordinate)
{
result.AddRange(GetYoungers(members, subo));
}
} return result;
}
方法解释:
首先,既然是递归,肯定是自己调用自己;
然后,在方法体内部:
既然要获取所有的下属(晚辈),首先要获取自己的直属下属,并将结果存入“下属”集合中;
然后通过递归,获取 “直属下属的直属下属”,同样存入“下属”集合中;
最后,返回“下属”集合。
递归测试:
/// <summary>
/// 测试递归
/// </summary>
public static void CheckRecursion()
{
List<FamilyMember> list = new List<FamilyMember>
{
new FamilyMember{ identity = "爷爷", level = , father = ""},
new FamilyMember{ identity = "爸爸", level = , father = "爷爷"},
new FamilyMember{ identity = "叔叔", level = , father = "爷爷"},
new FamilyMember{ identity = "自己", level = , father = "爸爸"},
new FamilyMember{ identity = "弟弟", level = , father = "爸爸"},
new FamilyMember{ identity = "堂兄", level = , father = "叔叔"},
new FamilyMember{ identity = "堂弟", level = , father = "叔叔"},
new FamilyMember{ identity = "儿子", level = , father = "自己"},
new FamilyMember{ identity = "女儿", level = , father = "自己"},
new FamilyMember{ identity = "侄子", level = , father = "弟弟"},
new FamilyMember{ identity = "侄女", level = , father = "弟弟"}
}; var self = new FamilyMember { identity = "爷爷", level = , father = "" }; var youngers = GetYoungers(list, self).OrderBy(p => p.level).ToList();
if(youngers != null)
{
foreach(var p in youngers)
{
Console.WriteLine(p.identity);
}
}
}
调用该方法即可查看效果:

C# 使用递归获取所有下属、所有子部门……的更多相关文章
- php 获取文件下的所有文件。php 获取文件下的所有子文件。php 递归获取文件下的所有文件。封装好的方法
//php 获取文件下的所有文件.php 获取文件下的所有子文件.php 递归获取文件下的所有文件.直接上封装好的php代码 <?php //文件路径 $dir = dirname(__FILE ...
- MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)
背景说明 需求:MySQL树形结构, 根据指定的节点,获取其下属的所有子节点(包含路径上的枝干节点和叶子节点) 枝干节点:如果一个节点下还有子节点,则为枝干节点. 叶子节点:如果一个节点下不再有子节点 ...
- 【吐血分享】SQL Server With As 递归获取层级关系数据
纯洁的一周又开始了,今天看到一则新闻,笑尿了,和袁友们一起娱乐下 最近两月在做基于Saas模式的人力资源管理产品,平常数据库设计我经常会遇到如下需求场景: 以前商城类网站在设计类型表的时候,设计成单表 ...
- Think PHP递归获取所有的子分类的ID (删除当前及子分类)
递归获取所有的子分类的ID: //递归获取所有的子分类的ID function get_all_child($array,$id){ $arr = array(); foreach($array as ...
- 【MongoDB】递归获取字段更新表达式,更新复杂数据类型对象
在实际更新Mongo对象时发现,原有的更新代码无法更新复杂的数据类型对象.恰好看到张占岭老师有对该方法做相关的改进,因此全抄了下来. 总的核心思想就是运用反射与递归,对对象属性一层一层挖掘下去,循环创 ...
- php递归获取顶级父类id
php递归获取顶级父类id function get_top_parentid($id){ $r = M('navclass')->where('id = '.$id)->field('i ...
- 递归获取XML元素
看到的一道题,用递归获取XML元素.... static void Main(string[] args) { string xmlContent = @"<FileSystem> ...
- Java 递归获取一个路径下的所有文件,文件夹名称
package com.readfile; import java.io.File; public class GetAllFiles { public static void main(String ...
- js递归获取html页面所有标签
js原生递归获取,直接源码 : <script> var child = document.children; var arr = [];//用来存放获取到的所有的标签 function ...
随机推荐
- OpenCV学习笔记3
OpenCV学习笔记3 图像平滑(低通滤波) 使用低通滤波器可以达到图像模糊的目的.这对与去除噪音很有帮助.其实就是去除图像中的高频成分(比如:噪音,边界).所以边界也会被模糊一点.(当然,也有一些模 ...
- 知识不是来炫耀的,而是来分享的-----现在的人们却…似乎开始变味了…
我讨厌那些自以为是的人,哪些只有远大抱负却不付出的混蛋,我讨厌那些老生欺负小生,讨厌以大欺小,讨厌别人把知识拿来炫耀. 我自己也不愿做这类人,我渴望看到成功,我不怕一意孤行,我不怕失败,我只怕自己做的 ...
- 为什么无人机测量主流现在都不用RTK技术,而是PPK技术【转】
为什么无人机测量主流现在都不用RTK技术,而是PPK技术_宇辰网_让世界读懂无人机_全球专业无人机资讯|电商|大数据服务平台 大疆Phantom 4 RTK正式发布_宇辰网_让世界读懂无人机_全球专业 ...
- shiro是什么?
是什么? Shiro是一个非常强大的.易于使用的.开源的.权限框架.它包括了权限校验.权限授予.会话管理.安全加密等组件. 为什么要使用shiro? 如果你是需要设计RBAC(Role Based A ...
- Authentication源码解析
1.获取当前的 Subject. 调用 SecurityUtils.getSubject(); 从当前线程的threadLocals属性中获取Subject对象 SecurityUtils publi ...
- Consul 注册中心介绍
在 Spring Cloud 体系中,几乎每个角色都会有两个以上的产品提供选择,比如在注册中心有:Eureka.Consul.zookeeper.etcd 等:网关的产品有 Zuul.Spring C ...
- Linux文件属性整理
Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限.为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定.在Linux中我们可以 ...
- 【转载】 C#中使用Count方法获取List集合中符合条件的个数
很多时候操作List集合的过程中,我们需要根据特定的查询条件,获取List集合中有多少个实体对象符合查询条件,例如一批产品的对象List集合,如果这批产品的不合格数量大于10则重点备注.在C#中可以自 ...
- [转]github 上传project代码
原文地址:https://www.cnblogs.com/f1194361820/p/4741558.html 1)将远程仓库纳入管理 其实就是添加远程仓库,在你已有的本地仓库目录下执行如下命令: $ ...
- AE开发—利用IQueryFilter接口进行属性查询
在ArcGis Engine二次开发过程中,经常会需要用到查询统计的功能,而IQueryFilter是最常见的属性字段查询接口,可以用来做一些简单的查询工作. 现在有一些公交站点和公交路线的数据,可视 ...