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开发框架网发布内容,转载请附上原文出处连接
post YES开发框架