public async Task <ActionResult> GetCustomersAsync([FromQuery] Pagination pagination, [FromQuery] SearchUser search) { var customers = await _userManager.GetUsersInRoleAsync(Roles.Customer); var queryableCustomers = customers.AsQueryable(); // Search by Email: if (search.Email != "") { queryableCustomers = queryableCustomers.Where(a => a.Email.ToLower().Contains(search.Email.ToLower())); } // Sort Asc: if (search.sortAsc.ToLower() == "email") { queryableCustomers = queryableCustomers.OrderBy(a => a.Email); } // Sort Desc: // sort by any input field: // a => a.GetType().GetProperty(search.sortDesc).GetValue(a) !!not work if (search.sortDesc.ToLower() != "email") { queryableCustomers = queryableCustomers.OrderByDescending(a => a.Email); } var result = queryableCustomers.ToList(); var paginatedList = PaginatedList <IdentityUser> .Create( result, pagination.current, pagination.pageSize ); // Mapping data IList <CustomerResponseDTO> response = new List <CustomerResponseDTO>(); for (int i = 0; i < paginatedList.Data.Count(); i++) { IdentityUser item = (IdentityUser)paginatedList.Data.ElementAt(i); var claims = await _userManager.GetClaimsAsync(item); var mapped = _mapper.Map <IdentityUser, CustomerResponseDTO>( source: item, opts: opt => opt.Items["claims"] = claims ); response.Add(mapped); } return(Ok(PaginatedList <object> .ApplyWithSource(response, paginatedList))); }