using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApp7
{
class Program
{
static void Main(string[] args)
{ var data = GetData(); //获取所有下级
//var query = GetSons(data, 1); //获取所有上级
var query = GetFatherList(data, 5);
Console.WriteLine("Id\t 区划\t 父ID\t 层级\t");
query.ToList().ForEach(q => Console.WriteLine("{0}\t {1}\t {2}\t {3}\t", q.Id, q.Name, q.Fid, q.Level)); Console.ReadLine();
} #region 测试数据
public static IList<menu> GetData()
{
var list = new List<menu>();
list.Add(new menu { Id = 1, Name = "广东省", Fid = 0, Level = 1 });
list.Add(new menu { Id = 2, Name = "深圳市", Fid = 1, Level = 2 });
list.Add(new menu { Id = 3, Name = "南山区", Fid = 2, Level = 3 });
list.Add(new menu { Id = 4, Name = "福田区", Fid = 2, Level = 3 });
list.Add(new menu { Id = 5, Name = "上梅林", Fid = 4, Level = 4 });
list.Add(new menu { Id = 6, Name = "下梅林", Fid = 4, Level = 4 });
list.Add(new menu { Id = 7, Name = "车公庙", Fid = 4, Level = 4 });
list.Add(new menu { Id = 8, Name = "蛇口", Fid = 5, Level = 4 });
list.Add(new menu { Id = 9, Name = "科技园", Fid = 5, Level = 4 });
list.Add(new menu { Id = 10, Name = "湖南省", Fid = 0, Level = 1 });
list.Add(new menu { Id = 11, Name = "长沙市", Fid = 10, Level = 2 });
list.Add(new menu { Id = 12, Name = "芙蓉区", Fid = 11, Level = 3 });
return list;
}
#endregion #region 获取所有下级
public static IEnumerable<menu> GetSons(IList<menu> list, int Fid)
{
var query = list.Where(p => p.Id == Fid).ToList();
var list2 = query.Concat(GetSonList(list, Fid));
return list2;
} public static IEnumerable<menu> GetSonList(IList<menu> list, int Fid)
{
var query = list.Where(p => p.Fid == Fid).ToList();
return query.ToList().Concat(query.ToList().SelectMany(t => GetSonList(list, t.Id)));
}
#endregion #region 获取所有上级
public static IEnumerable<menu> GetFatherList(IList<menu> list, int Id)
{
var query = list.Where(p => p.Id == Id).ToList();
return query.ToList().Concat(query.ToList().SelectMany(t => GetFatherList(list, t.Fid)));
}
#endregion #region 实体类
public class menu
{
public int Id { set; get; }
public string Name { set; get; }
public int Fid { set; get; }
public int Level { set; get; }
}
#endregion
}
}

转自:https://blog.csdn.net/smartsmile2012/article/details/81317327

【转】C# 中Linq查询所有上级节点或所有下级节点的更多相关文章

  1. C#中Linq查询基本操作

    摘要:本文介绍Linq查询基本操作(查询关键字) - from 子句 - where 子句 - select子句 - group 子句 - into 子句 - orderby 子句 - join 子句 ...

  2. C#中Linq查询List与DataTable和Dictionary

    查询DataTable返回List List<string> listNation = dtNation.AsEnumerable().Select(d => d.Field< ...

  3. Entity Framework 5中应用表值函数进行Linq查询

    Entity Framework 5引入了表值函数(Table-Valued Functions TVFs).表值函数的返回类型是一个Table类型,可用在SQL查询语句中.最简单的表值函数,读取客户 ...

  4. Linq to Sql:N层应用中的查询(上) : 返回自定义实体

    原文:Linq to Sql:N层应用中的查询(上) : 返回自定义实体 如果允许在UI层直接访问Linq to Sql的DataContext,可以省去很多问题,譬如在处理多表join的时候,我们使 ...

  5. linq 查询-“必须是可缩小的节点”

    出现此错误的情况 查询中先使用分组方法GroupBy()=>Select()=>OrderBy()=>ToList()(实现分组后排序) 解决方法: 排序OrderBy()应该放在S ...

  6. Rafy 中的 Linq 查询支持(根据聚合子条件查询聚合父)

    为了提高开发者的易用性,Rafy 领域实体框架在很早开始就已经支持使用 Linq 语法来查询实体了.但是只支持了一些简单的.常用的条件查询,支持的力度很有限.特别是遇到对聚合对象的查询时,就不能再使用 ...

  7. Linq to Sql:N层应用中的查询(下) : 根据条件进行动态查询

    原文:Linq to Sql:N层应用中的查询(下) : 根据条件进行动态查询 如果允许在UI层直接访问Linq to Sql的DataContext,可以省去很多问题,譬如在处理多表join的时候, ...

  8. 2.3 LINQ查询表达式中 使用select子句 指定目标数据

    本篇讲解LINQ查询的三种形式: 查询对象 自定义查询对象某个属性 查询匿名类型结果 [1.查询结果返回集合元素] 在LINQ查询中,select子句和from子句都是必备子句.LINQ查询表达式必须 ...

  9. Unity3D C#中使用LINQ查询(与 SQL的区别)

    学过SQL的一看就懂 LINQ代码很直观 但是,LINQ却又跟SQL完全不同 首先来看一下调用LINQ的代码 int[] badgers = {36,5,91,3,41,69,8}; var skun ...

随机推荐

  1. kubernetes pod infra container网络原理

    刚开始接触kubernetes时,对kubelet的--pod-infra-container-image参数非常不能理解,不理解为什么我的业务应用需要依赖一个第三方的容器: 上文入门级kuberne ...

  2. python中的列表

    1.  列表是什么,他可以用来做什么呢?当你存在这样的疑问,就往下看吧:) 列表是由一系列按特定顺序排列的元素组成的.在Python中,用[]来表示列表,并用逗号来分隔其中的元素. 我们可以创建包含字 ...

  3. Java8-Map

    1.Staff实体 public class Staff { private String name; private int age; private String address; public ...

  4. 安装LNMP笔记

    安装好centos7,主机ssl连不上 网卡设置为桥接模式或NAT模式 防火墙的原因 首先telnet本机22口 先更新yum源 yum update -y 安装网络常用工具:telnet trace ...

  5. 算法(第四版)C# 习题题解——1.4

    写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 这一节内容可能会用到的库文件有 ...

  6. Java过滤器Filter

    过滤器 一. 简介 过滤器一般用于设置字符编码.登录验证.权限验证.敏感词过滤等,减少了代码的冗余,便于代码的复用,但是不一定是每个servlet都必须使用过滤器的. 二. 过滤器的工作流程 图片来源 ...

  7. 富文本编辑器Quill(一)简单介绍

    Quill是一个很流行的富文本编辑器,github上star大约21k: github:https://github.com/quilljs/quill/ 官网: https://quilljs.co ...

  8. SAP abap 内表增加字段方法,结构复用

    1.include data: begin of gth_qamr.         include structure qamr. data: kurztext like qamv-kurztext ...

  9. Spring boot Spring cloud 框架搭建

    随笔记载几个框架搭建时的坑: 这个是server提供者模块,需要注意的是spring:application:name 接下来是fegin模块,需要主要注意信息已说明,需要特别说明的是RequestM ...

  10. 20175312 2018-2019-2 《Java程序设计》第8周学习总结

    20175312 2018-2019-2 <Java程序设计>第8周学习总结 教材学习内容总结 已依照蓝墨云班课的要求完成了第十章的学习,主要的学习渠道是PPT,和书的课后习题. 总结如下 ...