EntityFramework Linq 获得所有数据,包括子节点


开发环境:EntityFramework,EF LINQ数据查询

例子:获得用户拥有的角色,角色是上下级结构,父节点的角色默认拥有所有子节点的权限,所以这里我们需要获得用户分配的角色,以及这些角色的所有子节点角色

代码:

public static class EntitiesContextExtensions
{
    /// <summary>
    /// 获得用户拥有的角色
    /// </summary>
    /// <param name="entities"></param>
    /// <param name="userID">
    public static List<string> GetUserAllPositionIDs(this YESWEB.DB.Business.EntitiesContext _entities, string userID)
    {
        //获得用户所属的职位,包含子职位
        var query = _entities.base_position.Where(w => _entities.base_userRelation.Any(u => u.Category == 1 && u.UserID == userID && u.ObjectID == w.RowID)
        ).ToList();
        //if (query.Count == 0) return new List<string>();
        var _IuserRelation = query.Concat(query.SelectMany(t => getAllChildren(_entities.base_position, new String[] { t.RowID }, obj => obj.RowID, obj => obj.ParentID)));

        var userAllpositionID = _IuserRelation.Select(p => p.RowID).Distinct().ToList();

        if ((userAllpositionID.Count == 0) || (_entities.base_position.Any(w => (userAllpositionID.Contains(w.RowID)) && (w.IsAlone != "Y"))))
        {
            string everyID = _entities.base_position.Where(w => w.PosCode.ToLower() == "everyone").Select(s => s.RowID).FirstOrDefault();
            userAllpositionID.Add(everyID);
        }

        return userAllpositionID;
    }

    private static IEnumerable<T> getAllChildren<T>(IEnumerable<T> Data, IEnumerable<string> rowIDs, Func<T, string> funcID, Func<T, string> funcParentID)
    {
        var query = (from c in Data
                     where rowIDs.Contains(funcParentID(c))
                     select c).ToList();
        return query.Concat(query.SelectMany(t => getAllChildren(Data, new String[] { funcID(t) }, funcID, funcParentID)));
    }
}
GarsonZhang www.yesdotnet.com

得到所有角色列表

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
YES开发框架
上一篇:C# winform无边框窗体移动的四种方法
下一篇:EntityFramework Linq 查询数据获得树形结构
评论列表

发表评论

评论内容
昵称:
验证码:
验证码
关联文章

EntityFramework Linq 获得所有数据包括节点
EF Linq查找所有节点或者所有节点
EntityFramework Linq 查询数据获得树形结构
SQL Server树形结构获取所有节点
SQL Server获得所有数据库,所有表试图和字段
Linq to SQL语句基础讲解
WPF 组织机构摄像机树 全量加载 大数据量 分页加载摄像机节点
WEBAPI获得POST数据
了解LINQ
adb命令获得所有包名
C# LINQ中SUM,MAX,MIN时如果数据为空,报错NULL
SQL中根据日期范围生成所有日期数据,批量生成日期
.NET获得IP地址
EF Linq判断数据是新增,删除,还是修改
nginx集群中按照url规则指定节点访问
复合条件查询
jQuery动态添加设置.active属性实现当前选择节点样式
EF EntityFramework.MappingAPI批量导入 模型属性顺序和数据库表不一致时导入错位
深入理解 EF Core HierarchyId:高效管理树形数据的利器
Linq和Lambda 性能对比

热门标签
.NET Core .NET Reactor ag-grid AI发布 api安全 ASP.NET Core C#DLL加密 C#播放声音 C#代码混淆 C#代码加密 ChromeDriver Codex DateTime DBeaver devexpress devTool DLL混淆 edge.js EF EFCore Electron element-ui el-form el-table excel FastReport FileStream FolderBrowerDialog FolderSelectDialog form提交 git gridcontrol gridview input javascript json字符串 JS转换对象JSON jwt JWT授权 linq log Math MCP mitmproxy MVC MySQL Navicat netstat nginx node_modules NSwag Nuget Nuget镜像 number PowerShell pyinstaller python pythoncom python爬虫 python抓包 pywin32 redis Requests-html RestSharp Selenium sql SQL Server Swagger to-cms Visual Studio VSCode vue VueRouter vue路由 VUE页面通讯 Webpack Windows Windows服务 winform wmi xlrd yaml YESCMS YESWEB开发框架 白象 表单提交 播放声音 打开URL 代码混淆 弹窗提醒 端口占用 对象转换 分布式 公共字典 机器码 进程排查 静态资源 开发指南 路由参数 密钥 配置教程 配置文件 权限 人工智能 任务 任务调度 日期间隔 日志 日志记录 省市区 授权验证 数据库 四舍五入 文案 文件读取 文件夹选择 文件目录选择 问题排查 行政区域数据 页面通讯 中间件 CSharp 事务锁 工单系统 并发控制 重复提交 CMS Markdig Markdown markdown-it marked 技术选型 VS Code 开发工具 源代码管理 版本控制 Docker PostgreSQL 时区 部署排查 CMS架构 EF Core 主题系统 二次开发 插件系统 容器 运维命令 镜像清理 Linux NAS 远程挂载 飞牛 fnOS
联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码