本例中获取的是所有的晚辈!首先定义家庭成员类:

    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# 使用递归获取所有下属、所有子部门……的更多相关文章

  1. php 获取文件下的所有文件。php 获取文件下的所有子文件。php 递归获取文件下的所有文件。封装好的方法

    //php 获取文件下的所有文件.php 获取文件下的所有子文件.php 递归获取文件下的所有文件.直接上封装好的php代码 <?php //文件路径 $dir = dirname(__FILE ...

  2. MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)

    背景说明 需求:MySQL树形结构, 根据指定的节点,获取其下属的所有子节点(包含路径上的枝干节点和叶子节点) 枝干节点:如果一个节点下还有子节点,则为枝干节点. 叶子节点:如果一个节点下不再有子节点 ...

  3. 【吐血分享】SQL Server With As 递归获取层级关系数据

    纯洁的一周又开始了,今天看到一则新闻,笑尿了,和袁友们一起娱乐下 最近两月在做基于Saas模式的人力资源管理产品,平常数据库设计我经常会遇到如下需求场景: 以前商城类网站在设计类型表的时候,设计成单表 ...

  4. Think PHP递归获取所有的子分类的ID (删除当前及子分类)

    递归获取所有的子分类的ID: //递归获取所有的子分类的ID function get_all_child($array,$id){ $arr = array(); foreach($array as ...

  5. 【MongoDB】递归获取字段更新表达式,更新复杂数据类型对象

    在实际更新Mongo对象时发现,原有的更新代码无法更新复杂的数据类型对象.恰好看到张占岭老师有对该方法做相关的改进,因此全抄了下来. 总的核心思想就是运用反射与递归,对对象属性一层一层挖掘下去,循环创 ...

  6. php递归获取顶级父类id

    php递归获取顶级父类id function get_top_parentid($id){ $r = M('navclass')->where('id = '.$id)->field('i ...

  7. 递归获取XML元素

    看到的一道题,用递归获取XML元素.... static void Main(string[] args) { string xmlContent = @"<FileSystem> ...

  8. Java 递归获取一个路径下的所有文件,文件夹名称

    package com.readfile; import java.io.File; public class GetAllFiles { public static void main(String ...

  9. js递归获取html页面所有标签

    js原生递归获取,直接源码 : <script> var child = document.children; var arr = [];//用来存放获取到的所有的标签 function ...

随机推荐

  1. hadoop 空间配置

    hadoop-------------- 分布式计算框架. common // hdfs //存储 mapreduce //MR,编程模型. yarn //资源调度. 集群部署----------- ...

  2. Angular Material 学习笔记 Chips

    依据 material guidelines, chips 可以用来做 filter https://material.io/design/components/chips.html#filter-c ...

  3. Python查看模块

    1.查看Python所有内置模块 按以下链接打开,每个模块有介绍,可以选择不同的版本 https://docs.python.org/3.6/library/index.html 2.查看Python ...

  4. Snort Rule Infographic

    Snort Rule Infographic Official Documentation Snort FAQ  Snort Team / Open Source Community Snort Us ...

  5. JAVA操作ORACLE大对象

    一:操作CLOB  (1)数据库表结构如下:         create table CLOB_TEST      (         ID      VARCHAR2(5) not null,   ...

  6. java读取文件的几种方式性能比较

    //普通输入流读取文件内容 public static long checksumInputStream(Path filename) { try(InputStream in= Files.newI ...

  7. stm32 触摸屏 XPT2046

    引脚功能描述 控制字的控制位命令 控制字节各位描述 单端模式输入配置 差分模式输入配置 时序 前8个时钟用来通过DIN引脚输入控制字节,接着的12个时钟周期将完成真正的模数转换,剩下的3个多时钟周期将 ...

  8. Android笔记(二十二) Android中的GridView

    GridView和ListView一样,是Android中比较常见的布局控件,譬如我们的手机桌面其实就是一个GridView. 效果: 实现过程和ListView类似,也是通过Adapter将数据源展 ...

  9. Django:ContentType组件

    一.项目背景 二.版本一 三.版本二 三.终极版(使用ContentType) 一.项目背景 luffy项目,有课程有学位课(不同的课程字段不一样),价格策略 问题:1.如何设计表结构,来表示这种规则 ...

  10. 在STM32F746G-DISCO开发板上使用Nabto + FreeRTOS的演示热泵应用

    当使用STM32 ARM Cortex-M微控制器时,ST的免费嵌入式软件STM32Cube提供了所有必要的驱动程序和中间件组件,以减少初始的开发工作.在上述提到的中间件组件中,其中一个是非常受欢迎的 ...