public async Task <MessageModel <PageModel <sysUserInfo> > > Get(int page = 1, string key = "") { if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key)) { key = ""; } int intPageSize = 50; var nextRoleIds = (await _roleServices.GetNextRoles(_user.ID)).Select(it => it.Id).ToList(); var data = await _sysUserInfoServices.QueryTabsPage <sysUserInfo, UserRole, sysUserInfo>((a, b) => new object[] { JoinType.Inner, a.uID == b.UserId }, (a, b) => a.tdIsDelete != true && a.uStatus >= 0 && ((a.uLoginName != null && a.uLoginName.Contains(key)) || (a.uRealName != null && a.uRealName.Contains(key)) && nextRoleIds.Contains(b.RoleId)), a => new { a.uID }, (a, b) => a, page, intPageSize, " uID desc "); #region MyRegion // 这里可以封装到多表查询,此处简单处理 var userIds = data.data.Select(it => it.uID).ToList(); var allUserRoles = await _userRoleServices.Query(d => d.IsDeleted == false && userIds.Contains(d.UserId)); var allRoles = await _roleServices.Query(d => d.IsDeleted == false); var currentRoleId = (await _userRoleServices.Query(it => it.UserId == _user.ID && it.IsDeleted == false)).FirstOrDefault(); var sysUserInfos = data.data; foreach (var item in sysUserInfos) { item.RIDArray = await _roleServices.GetPreviousRoleIds(item.uID); var userRoleIds = allUserRoles.Where(d => d.UserId == item.uID).Select(d => d.RoleId).ToList(); List <List <int> > roleIds = new List <List <int> >(); foreach (var roleId in userRoleIds) { List <int> ids = new List <int>(); var role = allRoles.Where(it => it.Id == roleId).FirstOrDefault(); if (role == null) { continue; } ids.Add(role.Id); Role parent = allRoles.Where(it => it.Id == role.Pid).FirstOrDefault(); if (parent != null) { ids.Add(parent.Id); } while (parent != null) { parent = allRoles.Where(it => it.Id == parent.Pid).FirstOrDefault(); if (parent != null) { ids.Add(parent.Id); } } ; ids.Reverse(); roleIds.Add(ids); } item.RIDs = new List <int>(); item.RIDArray = roleIds; item.RoleNames = allRoles.Where(d => userRoleIds.Contains(d.Id)).Select(d => d.Name).ToList(); } data.data = sysUserInfos; #endregion return(new MessageModel <PageModel <sysUserInfo> >() { msg = "获取成功", success = data.dataCount >= 0, response = data }); }