/// <summary> /// 根据登录的用户id获取他对应未被禁用的角色字符串 /// </summary> /// <param name="Admin"></param> /// <returns></returns> public string GetRoleID(string AdminID) { //根据userID查询中间表数据 var iquery = r_UserInfo_RoleInfoDAL.LoadEntities(u => u.AdminID == AdminID); //获取角色信息的所有数据 var roleIquery = roleInfoDAL.LoadEntities(u => u.ID > 0); //连表-并筛选掉被禁用的角色 var r_roleIquery = (from a in iquery join b in roleIquery on a.RoleID equals b.RoleID into b_join from c in b_join.DefaultIfEmpty() select new { AdminID = a.AdminID, RoleID = a.RoleID, DelFlag = c.DelFlag, }).Where(u => u.DelFlag == 0); //筛选 #region 方法2,通过linq的分组获取 //分组 var grpiquery = (from a in r_roleIquery group a by new { a.AdminID //根据UserID进行分组 }).AsEnumerable().Select(p => new { UserID = p.Key.AdminID, RoleID = String.Join(",", p.Select(x => x.RoleID).ToArray()), //把RoleID通过逗号分隔,并实现字符串拼接 } ).ToList(); if (grpiquery.Count > 0) { return(grpiquery[0].RoleID); } else { return("0"); } #endregion }
/// <summary> /// 分页查询 /// </summary> /// <param name="pageIndex"></param> /// <param name="pageSize"></param> /// <param name="count"></param> /// <returns></returns> public List <AdminOutputDTO> GetPageList(int pageIndex, int pageSize, out int count, string selectInfo) { IQueryable <AdminInfo> iquery; if (selectInfo == null) { //说明没有点击搜索按钮 iquery = adminInfoDAL.LoadPageEntities(pageIndex, pageSize, out count, u => u.ID > 0, u => u.ID, true); } else { //根据文本框的值进行模糊查询 iquery = adminInfoDAL.LoadPageEntities(pageIndex, pageSize, out count, u => u.Name.Contains(selectInfo), u => u.ID, true); } //先拿到所有信息 IQueryable <R_UserInfo_RoleInfo> r_u_rIquery = r_UserInfo_RoleInfoDAL.LoadEntities(u => u.ID > 0);//获取用户角色中间表 IQueryable <RoleInfoOutpt> roleIquery = from a in roleInfoDAL.LoadEntities(u => u.ID > 0) select new RoleInfoOutpt { RoleID = a.RoleID, RoleName = a.DelFlag == 0 ? a.RoleName : a.RoleName + "(已被禁用)", }; //连表查询 IQueryable <AdminOutputDTO> linq = (from a in iquery join d in r_u_rIquery on a.AdminID equals d.AdminID into c_join from e in c_join.DefaultIfEmpty() join f in roleIquery on e.RoleID equals f.RoleID into d_join from g in d_join.DefaultIfEmpty() select new AdminOutputDTO { ID = a.ID, AdminID = a.AdminID, Name = a.Name, Phone = a.Phone, DelFlag = a.DelFlag, Sex = a.Sex, RoleName = g.RoleName, Email = a.Email, }); //分组 var grplinq = (from p in linq group p by new { p.ID, p.AdminID, p.Name, p.Phone, p.DelFlag, p.Sex, p.Email, }).AsEnumerable().Select(grp => new AdminOutputDTO { ID = grp.Key.ID, AdminID = grp.Key.AdminID, Name = grp.Key.Name, Phone = grp.Key.Phone, DelFlag = grp.Key.DelFlag, Sex = grp.Key.Sex, Email = grp.Key.Email, RoleName = string.Join(",", grp.Select(x => x.RoleName).ToArray()), //通过逗号隔开,把RoleName合并 }).OrderBy(u => u.ID).ToList(); return(grplinq.ToList()); }