public async Task <PageModelDto <UserDto> > GetPaged(UserSearchDto searchDto) { Expression <Func <SysUser, bool> > whereCondition = x => true; if (searchDto.Account.IsNotNullOrWhiteSpace()) { whereCondition = whereCondition.And(x => x.Account.Contains(searchDto.Account)); } if (searchDto.Name.IsNotNullOrWhiteSpace()) { whereCondition = whereCondition.And(x => x.Name.Contains(searchDto.Name)); } var pagedModel = await _userRepository.PagedAsync(searchDto.PageIndex, searchDto.PageSize, whereCondition, x => x.ID, false); var result = _mapper.Map <PageModelDto <UserDto> >(pagedModel); result.XData = await _deptAppService.GetSimpleList(); if (result.Count > 0) { var deptIds = result.Data.Where(d => d.DeptId != null).Select(d => d.DeptId).Distinct().ToList(); //var depts = await _deptRepository.SelectAsync(d => new { d.ID, d.FullName }, x => deptIds.Contains(x.ID)); var depts = (await _deptAppService.GetAllFromCache()) .Where(x => deptIds.Contains(x.ID)) .Select(d => new { d.ID, d.FullName }); //var roles = await _roleRepository.SelectAsync(r => new { r.ID, r.Name }, x => true); var roles = (await _roleAppService.GetAllFromCache()) .Select(r => new { r.ID, r.Name }); foreach (var user in result.Data) { user.DeptName = depts.FirstOrDefault(x => x.ID == user.DeptId)?.FullName; var roleIds = string.IsNullOrWhiteSpace(user.RoleId) ? new List <long>() : user.RoleId.Split(',', StringSplitOptions.RemoveEmptyEntries).Select(x => long.Parse(x)) ; user.RoleName = string.Join(',', roles.Where(x => roleIds.Contains(x.ID)).Select(x => x.Name)); } } return(result); }