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. IP通信基础学习第三周(下)

    TTL的最值是255. 数据部分不参与检验和的计算. 接收端的结果若为0,则保留:否则,会丢弃该数据报. IP数据报选项字段是可选的,主要用于网络测试和调试. IP辅助协议ICMP的消息类型有错误消息 ...

  2. centos7安装配置jdk

    ① java -version 可以查看系统自带的openjdk版本信息 ② rpm -qa | grep java  查看系统自带的Java文件 ③ 卸载文件(noarch文件可以不用删除) -- ...

  3. win10电脑只有自带浏览器能上网

    今天遇到了个奇葩问题,开机后登陆微信,怎么也登陆不上,用360检测,修复不了,找来大神一枚,打开我的Edge浏览器,各种网页浏览正常.......就告诉我就修好了.WTF!!! 现象:只有自带浏览器能 ...

  4. js中的数组方法

    数组的方法有数组原型方法,也有从object对象继承来的方法,这里我们只介绍数组的原型方法,数组原型方法主要有以下这些: join()push()和pop()shift() 和 unshift()so ...

  5. 回车\r与换行\n

    在计算机出现之前,有一种电传机械打字机,每秒可以打10个字符.但是有一个问题,就是打满一行后,需要进行换行,换行是需要0.2秒.如果这时有字符传入,就会丢失两个字符.为了解决这个问题,便定义了两个字符 ...

  6. HDU 1074 Doing Homework【状压DP】

    Doing Homework Problem Description Ignatius has just come back school from the 30th ACM/ICPC. Now he ...

  7. Log4j2 设置控制台打印彩色日志

    https://www.baidu.com/s?ie=utf-8&tn=02003390_20_hao_pg&wd=%E5%8D%9A%E5%AE%A2%E5%9B%AD%E7%99% ...

  8. flask No such command "init-db".

    在Daily目录下,使用cmd窗口执行,不要使用IDE的命令行 set FLASK_APP=DLY set FLASK_ENV=development flask init_app

  9. Vue-admin工作整理(三):路由

    1.router-link和router-view组件 router-link组件实际上是封装了一个a标签(链接标签),里面有一个重要属性:“to”,它的值是一个路径,其路径对应的渲染组件,要在路由列 ...

  10. Kinect外包团队— 2016中国VR开发者论坛第一期

    由VR界网和暴风魔镜联合举办的2016中国VR开发者论坛第一期已于3月2日下午5点在吉林动画学院圆满落幕,本次论坛云集了VR相关领域的精英,邀请了VR社交<极乐王国>.暴风魔镜.南京睿悦. ...