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获得所有数据库,所有表试图和字段
WPF 组织机构摄像机树 全量加载 大数据量 分页加载摄像机节点
Linq to SQL语句基础讲解
WEBAPI获得POST数据
adb命令获得所有包名
了解LINQ
C# LINQ中SUM,MAX,MIN时如果数据为空,报错NULL
SQL中根据日期范围生成所有日期数据,批量生成日期
.NET获得IP地址
EF Linq判断数据是新增,删除,还是修改
jQuery动态添加设置.active属性实现当前选择节点样式
EF EntityFramework.MappingAPI批量导入 模型属性顺序和数据库表不一致时导入错位
Linq和Lambda 性能对比
C# 配置文件增加自定义节点
iNeuOS工业互联网操作系统,增加算法分析平台,包括快速傅里叶变换、包络分析、倒频谱和自相关等算法
DBHelper SqlSugar EntityFramework 增删改查 性能对比测试
.net中使用Linq 判断两个集合是否有交集的集合类

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