EF Linq查找所有子节点或者所有父节点


EF LINQ查询中,有一张表,存放的是级别关系

内容如下,

EF Linq查找所有子节点或者所有父节点

现在需要根据一个节点查询出所有包含的子节点ID

 

C# 全选
using System;
using System.Collections.Generic;
using System.Linq;


namespace YESCMS.Libs
{
    public static class EnumerableExtension
    {


        /// <summary>
        /// 
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="data">结果数据</param>
        /// <param name="dataSource">数据源</param>
        /// <param name="predicate">数据判断是否符合要求,第一个参数为待判断的对象,第二个参数为判断的标准对象(用来判断第一个参数是否符合要求)</param>
        /// <returns></returns>
        public static List<T> GetAll<T>(this IEnumerable<T> data, IEnumerable<T> dataSource, Func<T, T, bool> predicate)
        {

            var _IuserRelation = data.Concat(data.SelectMany(t => getAllChildren(dataSource, t, predicate)));
            return _IuserRelation.ToList();
        }

        private static IEnumerable<T> getAllChildren<T>(IEnumerable<T> Data, T relationObj, Func<T, T, bool> func)
        {
            var query = Data.Where(w => func(w, relationObj));
            return query.Concat(query.SelectMany(t => getAllChildren(Data, t, func)));
        }
    }
}

 

参数说明

Func<T, T, bool> predicate,第一个对象为循环的对象,要根据第二个对象的值来判断第一个对象是否符合要求,

比如要查询所有子集节点,那么PreDicate应该为

根据节点查询出所有的子节点

C# 全选
var acg = entities.data_ArchiveCategoryGroup.Where(w => w.CategoryNo == Category).ToList();
var p = acg.Where(w => w.GroupCode == Group).GetAll(acg, (obj, reg) => obj.ParentRowID == reg.RowID);
var rowid = p.Select(s => s.RowID).Distinct();

测试:

数据源

EF Linq查找所有子节点或者所有父节点

查找 GroupCode == "normal" 节点 所有的子节点

查找结果

EF Linq查找所有子节点或者所有父节点

查找结果如图所示

EF Linq查找所有子节点或者所有父节点

 

根据节点查询出所有的父节点

C# 全选
var acg = entities.data_ArchiveCategoryGroup.Where(w => w.CategoryNo == Category).ToList();
var p = acg.Where(w => w.GroupCode == Group).GetAll(acg, (obj, reg) => obj.RowID == reg.ParentRowID);
var rowid = p.Select(s => s.RowID).Distinct();

测试:

数据源

EF Linq查找所有子节点或者所有父节点

查找 GroupCode == "fwmanager" 节点 所有的父节点

查找结果

EF Linq查找所有子节点或者所有父节点

数据视图

EF Linq查找所有子节点或者所有父节点

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
管理员
上一篇:web前端格式化缩进Razor代码,razor format
下一篇:什么是好的编程字体:等宽字体
评论列表

发表评论

评论内容
昵称:
关联文章

EF Linq查找所有节点或者所有节点
EntityFramework Linq 获得所有数据,包括节点
Linq to SQL语句基础讲解
了解LINQ
WPF 组织机构摄像机树 全量加载 大数据量 分页加载摄像机节点
EF 值转换
EF Core dotnet-ef 常用命令,指令
EntityFramework Linq 查询数据获得树形结构
从数据库或者其他位置加载ASP.NET MVC Views 视图 数据库中加载 cshtml
jQuery动态添加设置.active属性实现当前选择节点样式
VS .NET使用EF添加实体数据模型向导添加连接报错
EF并发处理,防止并发修改数据
解决winform使用EF6 第一次查询会慢个几秒钟
SQL Server获得所有数据库,所有表试图和字段
ASP.NET Core官网教程,资料查找
Linq和Lambda 性能对比
EF Linq判断数据是新增,删除,还是修改
EF事务提交
C# 配置文件增加自定义节点
EF Code First

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码