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. 第02节:JMS基本概念和模型

    1.JMS是什么 JMS Java Message Service,Java消息服务,是Java EE中的一个技术. 2.JMS规范 JMS定义了Java中访问消息中间件的接口,并没有机遇实现,实现J ...

  2. EDK II之SMM/SMI

    SMM:System Managerment Mode SMM有自己的smm core以及dispatcher(可以简单的把smm core跟dxe core看成是平行的存在),smm有自己的运行空间 ...

  3. Flutter数据库Sqflite之增删改查

    Flutter数据库Sqflite之增删改查   简介 sqflite是Flutter的SQLite插件,支持iOS和Android,目前官方版本是sqflite1.1.3 sqflite插件地址:h ...

  4. Java中日期格式(String、Date、Calendar)的相互转换

    package day20190318; import java.text.ParseException; import java.text.SimpleDateFormat; import java ...

  5. 纯CSS3完成选项卡,不要js完成的选项卡

    我爱撸码,撸码使我感到快乐!大家好,我是Counter.今天就来敲一敲,选项卡,注意哦,不是一般利用js完成的选项卡,今天是纯用HTML和CSS来完成的,这怎么可能?那你不用js的点击事件,怎么处理? ...

  6. 王之泰201771010131《面向对象程序设计(java)》第十二周学习总结

    第一部分:理论知识学习部分 第10章 图形程序设计 10.1 AWT与Swing简介 1.用户界面(User Interface) 的概念:用户与计算机系统(各种程序)交互的接口2.图形用户界面(Gr ...

  7. tree与GridView交互

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="OgGridView.asp ...

  8. 如何改变vim中的光标形状 : 在插入状态下显示为 beam?而在 其他 状态下 为 block?

    分成两种情况来说明: 如果是在 shell 即: gnome-termial终端中, 来启动或 使用 vim的话, 你是 无法 实现这种需求的: 改变vim中的光标形状 : 在插入状态下显示为 bea ...

  9. Java对象、引用、实例

    https://blog.csdn.net/zmx729618/article/details/54093075

  10. Gradle安装和在Eclipse中的使用

    Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具.它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置. 1 ...