记一则 Lambda内递归调用方法将集合对象转换成树形结构

 public dynamic GetDepartments(string labID)
        {
            List<int> usedIDs = new List<int>(); //缓存已用过的ID

            //定义递归算法
            Func<object,List<DepartmentItem>, List<DepartmentItem>, dynamic> recursion = (r,d,a) =>
            {
                List<dynamic> dyData = new List<dynamic>();
                if (d.Count > 0)
                {
                    d.ForEach(x =>
                    {
                        if (!usedIDs.Contains(x.DepartmentID))
                        {
                            dynamic department = new ExpandoObject();
                            department.DepartmentID = x.DepartmentID;
                            department.DepartmentName = x.DepartmentName;
                            department.DepartmentDesc = x.DepartmentDesc;
                            department.CreateTime = x.CreateTime;
                            department.ParentDepartmentID = x.ParentDepartmentID;
                            usedIDs.Add(x.DepartmentID);
                           // department.children = recursion(r, d, a); 这里直接调用的话会提示未定义变量,因为func的定义还没结束..
                           // 所以用以下的方法:调用的时候用object把方法传进来,然后转换下再调用执行;
                            var func_recursion = r as Func<object, List<DepartmentItem>, List<DepartmentItem>, dynamic>;
                            department.children = func_recursion(r, a.Where(w => w.ParentDepartmentID == x.DepartmentID).ToList(), a);
                            dyData.Add(department);
                        }
                    });
                }

                return dyData;
            };
            var departments =.....//获取集合数据;

            //调用方法
            //这里第一个参数就是方法的本身,传递进去进行递归调用
            var result = recursion(recursion, departments, departments);

            return result;

        }

  代码是将集合对象转换成树形结构

原文地址:https://www.cnblogs.com/yesicoo/p/10947161.html

时间: 2024-10-11 07:20:27

记一则 Lambda内递归调用方法将集合对象转换成树形结构的相关文章

教你用多种方法将pdf文件转换成jpg

我们在工作中经常会遇到pdf与word.excel.jpg等格式文件的转换,可是怎样才能把两种文件转换的完整有效呢?下面小编就pdf与jpg这两种格式来讲一下它们是如何转换的! pdf文件转换成jpg都有哪些方法? pdf文件转换成jpg有很多种方法,这里我们介绍最简单的三种,第一种是使用Adobe acrobat另存为jpg图片:另一种是在线将pdf转换成jpg; 还有一种方法可以使用第三方软件迅捷pdf转换器将pdf转换成jpg. 一.使用Adobe acrobat另存为jpg图片 用Ado

JS中JSON.stringify()方法,将js对象转换成字符串,传入服务器

JSON 通常用于与服务端交换数据. 在向服务器发送数据时一般是字符串. 我们可以使用 JSON.stringify() 方法将 JavaScript 对象转换为字符串. 语法 JSON.stringify(value[, replacer[, space]]) 参数说明: value: 必需, 要转换的 JavaScript 值(通常为对象或数组). replacer: 可选.用于转换结果的函数或数组. 如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个

我写了一个方法,把数字转换成字母

cnmm22 原创. 功能 把 1 转化成 A0, 2-B0, 3-C0, 21-U0, 87-I3, 2131-Y81 以此类推. package dw; public class dw { static int a; static int b; public static void main(String[] args) { int l = 2131; a = l / 26; b = (l + 25) % 26 + 1; String lu = (char) (b + 64) + "&quo

有什么方法可以把aac转换成mp3格式

音频转换其实在我们的生活中运用是很广泛的,比如说一些和转换音乐相关的工作,会遇到音频文件,还有些音乐发烧友在研究音乐的时候还会遇到音频格式问题,在比如说我们这些平凡的人如果在下载歌曲遇到不熟悉的格式时候会怎么办呢?对于那些专业的人来说或许他们有属于自己专业的方法,但对于我们这些大众用户来说一款好用的方法还是挺重要的,接下来就分享一种方法给你们,希望你们好好的看下去哦! 使用工具:迅捷音频转换器 工具简介:它是一款多功能的音频编辑处理软件,软件具有音频剪切.音频提取.音频合并和音频转换这四个功能,

把dataset对象转换成list集合方法

1 public static List<T> GetList<T>(DataTable table) where T:new() 2 { 3 List<T> list = new List<T>(); 4 // 5 T t = default(T); 6 PropertyInfo[] propertypes = null; 7 string tempName = string.Empty; 8 try 9 { 10 foreach (DataRow row

利用new Gson()的toJson方法将map对象转成json字符串

1 package mpsm.mcpsm.operation.demandInfoLoad.service; 2 3 import java.sql.ResultSet; 4 import java.text.DecimalFormat; 5 import java.util.ArrayList; 6 import java.util.HashMap; 7 import java.util.List; 8 9 import mpsm.mcpsm.operation.demandInfoLoad.

[java基础]递归调用

递归调用:通过调用或间接调用程序自身 递归调用最重要的一点是,一定要有个头,要是没有头,一直调用下去,就成了死循环了. 代码示例: /** * 递归调用代码示例<br> * 说明:一个方法,自己直接或间接的调用自己.<br> * @author 冲出地球 * */ public class Recursion { /** * 示例程序:阶乘<br> * 一个数的阶乘,就是从1一直乘到那个数<br> * 示例:2! = 1*2 5! = 1*2*3*4*5&l

玩坏JVM很简单--toString的递归调用

在JVM的内存管理机制下很少发生内存溢出的情况.至少我碰见的少,好像在SSH我多次发布项目时候出现过一次.今天看见一个特简单的方法让内存溢出(好吧,我似乎作死了--!): 1 public class InfiniteRecursion { 2 public String toString(){ 3 return "InfiniteRecursion address : " + this + "\n" ; 4 } 5 public static void main(

Java递归调用

6.递归调用 方法的递归调用就是方法自身调用自身. 以下程序因为递归没有结束的条件,所以一直压栈,没有弹栈,导致栈内存溢出错误!所以递归必须要有结束条件. public class RecursionTest01{ //入口 public static void main(String[] args){ m1(); } public static void m1(){ m1(); //java.lang.StackOverflowError } } [例题1]:不使用递归,计算1-N的求和. p