【转】C# 中Linq查询所有上级节点或所有下级节点
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查询所有上级节点或所有下级节点的更多相关文章
- C#中Linq查询基本操作
摘要:本文介绍Linq查询基本操作(查询关键字) - from 子句 - where 子句 - select子句 - group 子句 - into 子句 - orderby 子句 - join 子句 ...
- C#中Linq查询List与DataTable和Dictionary
查询DataTable返回List List<string> listNation = dtNation.AsEnumerable().Select(d => d.Field< ...
- Entity Framework 5中应用表值函数进行Linq查询
Entity Framework 5引入了表值函数(Table-Valued Functions TVFs).表值函数的返回类型是一个Table类型,可用在SQL查询语句中.最简单的表值函数,读取客户 ...
- Linq to Sql:N层应用中的查询(上) : 返回自定义实体
原文:Linq to Sql:N层应用中的查询(上) : 返回自定义实体 如果允许在UI层直接访问Linq to Sql的DataContext,可以省去很多问题,譬如在处理多表join的时候,我们使 ...
- linq 查询-“必须是可缩小的节点”
出现此错误的情况 查询中先使用分组方法GroupBy()=>Select()=>OrderBy()=>ToList()(实现分组后排序) 解决方法: 排序OrderBy()应该放在S ...
- Rafy 中的 Linq 查询支持(根据聚合子条件查询聚合父)
为了提高开发者的易用性,Rafy 领域实体框架在很早开始就已经支持使用 Linq 语法来查询实体了.但是只支持了一些简单的.常用的条件查询,支持的力度很有限.特别是遇到对聚合对象的查询时,就不能再使用 ...
- Linq to Sql:N层应用中的查询(下) : 根据条件进行动态查询
原文:Linq to Sql:N层应用中的查询(下) : 根据条件进行动态查询 如果允许在UI层直接访问Linq to Sql的DataContext,可以省去很多问题,譬如在处理多表join的时候, ...
- 2.3 LINQ查询表达式中 使用select子句 指定目标数据
本篇讲解LINQ查询的三种形式: 查询对象 自定义查询对象某个属性 查询匿名类型结果 [1.查询结果返回集合元素] 在LINQ查询中,select子句和from子句都是必备子句.LINQ查询表达式必须 ...
- Unity3D C#中使用LINQ查询(与 SQL的区别)
学过SQL的一看就懂 LINQ代码很直观 但是,LINQ却又跟SQL完全不同 首先来看一下调用LINQ的代码 int[] badgers = {36,5,91,3,41,69,8}; var skun ...
随机推荐
- JAVA函数的重载和重写
一.什么是重载(overlording) 在JAVA中,可以在同一个类中存在多个函数,函数名称相同但参数列表不同.这就是函数的重载(overlording).这是类的多太性表现之一. 二.重载的作用: ...
- liunx驱动----按键中断
liunx 中断 先设置异常入口 异常向量 void __init trap_init(void) 构造了异常向量 vector_irq+offset 按下按键: cpu自动进入异常模式 ...
- vue 定义全局函数,监听android返回键事件
vue 定义全局函数,监听android返回键事件 方法一:main.js 注入(1)在main.js中写入函数Vue.prototype.changeData = function (){ aler ...
- centos6/7破解root密码的操作
Centos 6 1.开机按“Esc”键 2.按e键进入编辑模式后,选择Kernel /vmlinuz-2.6.92......项 3.进入该编辑模式后,在quiet后面输入simple或者数字1后, ...
- 网易cetus数据库中间件安装-读写分离版本
安装前提:1.数据库主从关系要做好:2.授权用户登录要做好:3.mysql最大连接数设置好,不然会报连接错误:4.版本最好是5.6以上. 1.安装依赖 yum install cmake gcc gl ...
- 编程类-----matlab基础语法复习(2)
2019年美赛准备:matlab基本题目运算 clear,clc %% 计算1/3 + 2/5 + ...3/7 +10/21 % i = 1; j = 3; ans = 0; % while i & ...
- ERROR: Got error reading packet from server: A slave with the same server_uuid/server_id as this slave has connected to the master
centos7.5 做binlog-server,拉取主库binlog报错 问题: [root@db03-53 binlog]# mysqlbinlog -R --host=10.0.0.55 --u ...
- Hello2 source analysis
在example目录下的web\servlet\hello2\src\main\java\javaeetutorial\hello2路径里可以找到hello2的GreetingServlet.java ...
- Bootstrap如何实现导航条?导航条实例详解
本文主要和大家分享Bootstrap实现导航实例详解,在建设一个网站的时候,不同的页面有很多元素是一样的,比如导航条.侧边栏等,我们可以使用模板的继承,避免重复编写html代码.现在我们打算实现一个在 ...
- openwrt如何关掉防火墙?
答: 1. 阻止防火墙服务开机自动启动 /etc/init.d/firewall disable 2. 关闭防火墙 /etc/init.d/firewall stop