private UserPage GetUserPage(UserManagementFilter filter) { UserPage result = new ViewModels.AdminTools.UserPage { CurrentPage = 0, TotalPages = 0, Users = new List <UserViewModel>() }; using (ApplicationDbContext context = ApplicationDbContext.Create()) { // Filter the users by user email (user name) List <ApplicationUser> matchingUsers = (from user in context.Users where ((filter.Email == null || filter.Email == "") || user.Email.Contains(filter.Email)) && (!kExcludedUsers.Contains(user.Id)) select user).ToList(); List <UserViewModel> resultUsers = new List <UserViewModel>(); // Filter the users by role foreach (ApplicationUser user in matchingUsers) { string role = user.Roles.Single().RoleId; if (string.IsNullOrEmpty(filter.Role) || role == filter.Role) { resultUsers.Add(new UserViewModel { Id = user.Id, Email = user.Email, Username = user.UserName, Role = role }); } } // Get the result page int offset = (filter.PageNumber - 1) * filter.ResultsPerPage; int pages = (int)Math.Ceiling(resultUsers.Count / (double)filter.ResultsPerPage); // If there are enough results to make a page, if (matchingUsers.Count - offset >= filter.ResultsPerPage) { // Get a full page resultUsers = resultUsers.Skip(offset).Take(filter.ResultsPerPage).ToList(); } else { // Get the remaining users resultUsers = resultUsers.Skip(offset).ToList(); } result = new UserPage { CurrentPage = filter.PageNumber, TotalPages = pages, Users = resultUsers }; } return(result); }
public ActionResult UserPage(UserManagementFilter filter) { return(Json(GetUserPage(filter))); }