public async Task <IActionResult> Browse(ThesisSearchQuery searchQuery) { if (User.FindFirst("ModuleId") != null) { int.TryParse(User.FindFirst("ModuleId").Value, out int moduleId); searchQuery.ModuleId = moduleId; } PaginationView <ThesisView, ThesisSearchQuery> paginationView = new PaginationView <ThesisView, ThesisSearchQuery> { TargetAction = ControllerContext.RouteData.Values["action"].ToString(), TargetController = ControllerContext.RouteData.Values["controller"].ToString(), SearchQuery = searchQuery }; var serviceResult = await _thesisService.GetThesisSearchPage(searchQuery); paginationView.ObjectList = serviceResult.ObjectList.Select(e => (ThesisView)e); paginationView.TotalCount = serviceResult.TotalCount; return(View(paginationView)); }
public async Task <PaginationDTO <ThesisDTO, ThesisSearchQuery> > GetThesisSearchPage(ThesisSearchQuery searchQuery) { IQueryable <Thesis> queryBuilder = _context.Theses.Where(t => t.Subject.ModuleId == searchQuery.ModuleId) .Include(t => t.Subject) .Include(t => t.Professor); PaginationDTO <ThesisDTO, ThesisSearchQuery> returnPagination = new PaginationDTO <ThesisDTO, ThesisSearchQuery>(); if (searchQuery.ProfessorId.Count > 0) { queryBuilder = queryBuilder.Where(e => searchQuery.ProfessorId.Contains(e.Professor.Id)); } if (searchQuery.SubjectId.Count > 0) { queryBuilder = queryBuilder.Where(e => searchQuery.SubjectId.Contains(e.Subject.Id)); } if (searchQuery.Title != null && searchQuery.Title != "") { queryBuilder = queryBuilder.Where(e => e.Title.Contains(searchQuery.Title)); } if (searchQuery.HideTaken) { queryBuilder = queryBuilder.Where(e => e.DateTaken == null); } returnPagination.TotalCount = await queryBuilder.CountAsync(); if (searchQuery.PerPage != -1) { queryBuilder = queryBuilder .Skip(searchQuery.PerPage * (searchQuery.Page - 1)) .Take(searchQuery.PerPage); } returnPagination.ObjectList = await queryBuilder.Select(e => (ThesisDTO)e).ToArrayAsync(); returnPagination.SearchQuery = searchQuery; return(returnPagination); }