public async Task <GetListResponseModel <TModel> > GetListAppUsersAsync <TModel>( GetListAppUsersRequestModel requestModel, ParsingConfig parsingConfig = null) { #region Validation var userInfo = BusinessContext.Current?.PrincipalInfo; var validationData = new ValidationData(); // validation logic here if (!validationData.IsValid) { throw validationData.BuildException(); } #endregion var queryModel = requestModel.MapTo <DynamicQueryAppUserModel>(); IQueryable <AppUser> query = dbContext.Users.AsNoTracking(); #region Filter if (queryModel.Id != null) { query = query.ById(queryModel.Id); } if (queryModel.UserName != null) { query = query.ByUsername(queryModel.UserName); } if (queryModel.SearchTerm != null) { query = query.BySearchTerm(queryModel.SearchTerm); } #endregion var orgQuery = query; #region Sorting if (!queryModel.SortBy.IsNullOrEmpty()) { foreach (var field in queryModel.SortBy) { var asc = field[0] == QueryConsts.SortAscPrefix; var fieldName = field.Remove(0, 1); switch (fieldName) { case DynamicQueryAppUserModel.SortByUsername: { if (asc) { query = query.SequentialOrderBy(o => o.UserName); } else { query = query.SequentialOrderByDesc(o => o.UserName); } } break; default: throw AppValidationException.From(ResultCode.InvalidPagingRequest); } } } #endregion if (queryModel.Page > 0) { query = query.Limit(queryModel.Page, queryModel.PageLimit); } #region Projection var projectionArr = queryModel.Fields.Select(o => DynamicQueryAppUserModel.Projections[o]).ToArray(); var projectionStr = string.Join(',', projectionArr); var projectedQuery = query.Select <TModel>( parsingConfig ?? DynamicLinqEntityTypeProvider.DefaultParsingConfig, $"new {typeof(TModel).FullName}({projectionStr})"); #endregion var responseModels = await projectedQuery.ToArrayAsync(); var response = new GetListResponseModel <TModel> { List = responseModels, }; if (queryModel.CountTotal) { response.TotalCount = await orgQuery.CountAsync(); } return(response); }
public async Task <IActionResult> GetListAppUser([FromQuery][QueryObject] GetListAppUsersRequestModel model) { var data = await _identityService.GetListAppUsersAsync <GetListAppUsersResponseModel>(model); return(Success(data)); }