Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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);
        }