public async Task <PagedList <User> > GetUsers(PageRequestUserParams pageInfo) { var users = context.Users.Include(p => p.Photos).OrderByDescending(u => u.LastActive).AsQueryable(); users = users.Where(u => u.Id != pageInfo.UserId); users = users.Where(u => u.Gender == pageInfo.Gender); // that could be combined with previous line, but wanted to keep it separated to remind that 'where' predicates can be combined in chunks, very powerful stuff. var minDBO = DateTime.Today.AddYears(-pageInfo.MinAge); var maxDBO = DateTime.Today.AddYears(-pageInfo.MaxAge); users = users.Where(u => u.DateOfBirth <= minDBO && u.DateOfBirth >= maxDBO); if (!string.IsNullOrEmpty(pageInfo.OrderBy)) { switch (pageInfo.OrderBy) { case "created": users = users.OrderByDescending(u => u.Created); break; default: users = users.OrderByDescending(u => u.LastActive); break; } } return(await PagedList <User> .CreateAsync(users, pageInfo.PageNumber, pageInfo.PageSize)); }
public async Task <IActionResult> GetUsers([FromQuery] PageRequestUserParams pageRequestPrms) { var currentUserId = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value); var userFromRepo = await repo.GetUser(currentUserId); pageRequestPrms.UserId = currentUserId; if (string.IsNullOrEmpty(pageRequestPrms.Gender)) { pageRequestPrms.Gender = (userFromRepo.Gender == "male" ? "female":"male"); } var users = await repo.GetUsers(pageRequestPrms); var usersToReturn = mapper.Map <IEnumerable <UserForListDto> >(users); Response.AddPagination(users.CurrentPage, users.PageSize, users.TotalCount, users.TotalPages); return(Ok(usersToReturn)); }