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. Oarcle之组函数

    组函数 avg 求20部门的平均薪水为多少? select avg(sal) avgsal from emp where deptno = 20:  sum 求20部门的员工的总薪水 select s ...

  2. UI自动化(十三)appium操作

    定位: # id resource-id可能出现重复 如果appium-desktop提示了id 定位方式 说明id唯一driver.find_element_by_id('com.tencent.m ...

  3. [Python]基础教程(4)、Python 变量类型

    Python 变量类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的数据 ...

  4. android开发_Eclipse新建项目+新建模拟器

    一.新建项目 1 Eclipse->右键->new->Android Application Project,得到下图: 2 输入创建项目信息 3 点击next 4 点击 next ...

  5. JS(JavaScript)的初了解7(更新中···)

    1.逻辑运算  ||   && ! 1||2   5&&4  !0 || 遇到第一个为true的数字就终止并返回 && 遇到第一个为false的值 就终 ...

  6. 让selenium中的Cromerderive不加载图片设置

    把配置参数(chrom_opt)设置好后将其添加到 browser = webdriver.Chrome(executable_path="chromedriver.exe的路径" ...

  7. combineReducers

    const reactInit = '@@react/Init' const combineReducers = (reducers) => { const finalReducers = {} ...

  8. P4389 付公主的背包

    注意 初始化的时候要这样写 for(int i=1,x;i<=n;i++){ scanf("%d",&x); v[x]++; } for(int i=1;i<= ...

  9. Java集合源码分析之LinkedList

    1. LinkedList简介 public class LinkedList<E> extends AbstractSequentialList<E> implements ...

  10. 【BUAA-OO】第一单元作业总结

    #OO第一单元作业总结 #确认存活,爱学习,爱北航,爱OO 一.三次作业分析 1.第一次作业 1.1 程序结构 对方法的度量: 类的内聚和相互间的耦合情况: 类图: 优缺点: 优点大概没什么优点,毕竟 ...