第一种方法好些

第二种方法如果中间断开就会成为一级

  1. private static List<Menu> MenuTree()
  2. {
  3. var menu1 = new Menu { Id = , ParentId = , Name = "aaa" };
  4. var menu2 = new Menu { Id = , ParentId = , Name = "bbb" };
  5. var menu3 = new Menu { Id = , ParentId = , Name = "ccc" };
  6. var menu4 = new Menu { Id = , ParentId = , Name = "ddd" };
  7. var menu5 = new Menu { Id = , ParentId = , Name = "eee" };
  8. var menu6 = new Menu { Id = , ParentId = , Name = "fff" };
  9. var menu7 = new Menu { Id = , ParentId = , Name = "ggg" };
  10. var menu8 = new Menu { Id = , ParentId = , Name = "hhh" };
  11. var menuAll = new List<Menu> { menu1, menu2, menu3, menu4, menu5, menu6, menu7, menu8 };
  12. var menuList = new List<Menu> { menu1, menu2, menu3, menu4, menu5, menu7, menu8 };
  13. //第一种方法
  14. while (true)
  15. {
  16. var idList = menuList.Select(x => x.Id).ToList();
  17. idList.AddRange(menuList.Select(x => x.ParentId).ToList());
  18. idList = idList.Distinct().ToList();
  19. var menus = menuAll.Where(x => idList.Contains(x.Id)).ToList();
  20. if (menus.Count != menuList.Count)
  21. {
  22. menuList = menus;
  23. continue;
  24. }
  25.  
  26. break;
  27. }
  28.        //第二种方法 
  29. var ret = new List<Menu>();
  30. foreach (var menu in menuList)
  31. {
  32. var model = menuList.FirstOrDefault(x => x.Id == menu.ParentId);
  33. if (model == null)
  34. {
  35. ret.Add(menu);
  36. continue;
  37. }
  38.  
  39. model.Children.Add(menu);
  40. }
  41.  
  42. return ret;
  43. }

C# 一次循环获取树的两种方法的更多相关文章

  1. javascript获取属性的两种方法及区别

    javascript获取属性有两种方式,点或者中括号: var obj={} obj.x=1 console.log(obj.x)//1 第一种方式,x是字面量 try{ console.log(ob ...

  2. ajax获取值的两种方法

    详细连接https://blog.csdn.net/a1102325298/article/details/80785143 ajax获得表单值的俩种方法 2018年06月23日 17:12:02 延 ...

  3. Java中for循环遍历List的两种方法

    我们平常使用的方法: List<WebElement> element = driver.findElements(By.tagName("input"));      ...

  4. Android从Camera中获取图片的两种方法

    方法一: 此方法会由Camera直接产生照片回传给应用程序,但是返回的是压缩图片,显示不清晰 ? 1 2 3 4 5 6 try {      Intent cameraIntent = new In ...

  5. windows下获取IP地址的两种方法

    windows下获取IP地址的两种方法: 一种可以获取IPv4和IPv6,但是需要WSAStartup: 一种只能取到IPv4,但是不需要WSAStartup: 如下: 方法一:(可以获取IPv4和I ...

  6. php获取数组中重复数据的两种方法

    分享下php获取数组中重复数据的两种方法. 1,利用php提供的函数,array_unique和array_diff_assoc来实现 <?php function FetchRepeatMem ...

  7. 获取网页URL地址及参数等的两种方法(js和C#)

    转:获取网页URL地址及参数等的两种方法(js和C#) 一 js 先看一个示例 用javascript获取url网址信息 <script type="text/javascript&q ...

  8. Java 获取*.properties配置文件中的内容 ,常见的两种方法

    import java.io.InputStream; import java.util.Enumeration; import java.util.List; import java.util.Pr ...

  9. javascript获取json对象的key名称的两种方法

    javascript获取json对象的key名称的两种方法 数据处理中,你可能接收到一个不确定内容格式的json对象,然后要把key的值提取出来.今天试过两种可以提取json key的方法,均可以正常 ...

随机推荐

  1. Flutter 基础布局Widgets之Align

    Align的作用是为了设置子child的对齐方式,一般作为其他控件的一个参数. 构造函数 const Align({ Key key, this.alignment = Alignment.cente ...

  2. Time-Frequency Networks For Audio Super-Resolution

    论文题目:2018_用于音频超分辨率的时频网络 博客作者:凌逆战 博客地址:https://www.cnblogs.com/LXP-Never/p/12345950.html 摘要 音频超分辨率(即带 ...

  3. RFC笔记—IP Version 6 Addressing Architecture

    IP Version 6 Addressing Architecture,RFC4291 It includes the basic formats for the various types of ...

  4. git-gitlab-github集合

    git-gitlab-github集合 git(一):     git简介 git(二):     git安装和简单使用 git(三):     git的分支管理 git(四):     git的远程 ...

  5. k8s系列---kubectl基础

    kubectl get pods  查看所有pods kubectl  get  services  查看services kubectl replace --filename=myweb-rc.ya ...

  6. H5页面优化

    1. 页面优化 优化内容: 提升网页响应速度:减少请求,文件大小,页面性能 对搜索引擎,屏幕阅读器友好: 提高可读性,可维护性:规范代码 优化操作: 减少请求:小图标使用sprite拼图合并为一个图片 ...

  7. 【重新整理】log4j 2的使用

    一 概述 1.1 日志框架 日志接口(slf4j) slf4j是对所有日志框架制定的一种规范.标准.接口,并不是一个框架的具体的实现,因为接口并不能独立使用,需要和具体的日志框架实现配合使用(如log ...

  8. 使用ASP.NET Core构建RESTful API的技术指南

    译者荐语:利用周末的时间,本人拜读了长沙.NET技术社区翻译的技术标准<微软RESTFul API指南>,打算按照步骤写一个完整的教程,后来无意中看到了这篇文章,与我要写的主题有不少相似之 ...

  9. React之深入了解虚拟DOM

    JS在手机中也可运行,React Native通过将虚拟DOM转换为底层的原生组件,即可在手机端运行,在浏览器运行时,只需要将虚拟DOM转换为真实DOM即可运行,虚拟DOM就是将真实DOM转换为JS对 ...

  10. Nodejs中,path.join()和path.resolve()的区别

    在说path.join()和path.resolve()的区别之前,我先说下文件路径/和./和../之间的区别 /代表的是根目录: ./代表的是当前目录: ../代表的是父级目录. 然后再来说下pat ...