public virtual async Task<ActionResult> ListAjax(TeacherSearchRequest request) { var viewModel = await _TeacherService.GetPagedListAsync(request); if (viewModel.Teachers == null || !viewModel.Teachers.Any()) return Content("no-more-info"); return PartialView(MVC.Teacher.Views._ListAjax, viewModel); }
public async Task<TeacherListViewModel> GetPagedListAsync(TeacherSearchRequest request) { var Teachers = _Teachers.Include(a => a.Creator) .Include(a => a.ReferentialTeachers) .Include(a => a.LasModifier) .Include(a => a.Position) .Include(a => a.ApproveBy) .Where( a => !a.ReferentialTeachers.Any( r => (r.ReferencedToId == r.ReferencedFromId && !r.FinishedDate.HasValue))) .AsNoTracking() .AsQueryable(); if (request.TeacherApprovalFilter == TeacherApprovalFilter.IsApproved) Teachers = Teachers.Where(a => a.IsApproved).AsQueryable(); if (request.TeacherApprovalFilter == TeacherApprovalFilter.NonApproved) Teachers = Teachers.Where(a => !a.IsApproved).AsQueryable(); if (request.TeacherReferenceFilter == TeacherReferenceFilter.Referenced) Teachers = Teachers.Where(a => a.IsInReference).AsQueryable(); if (request.TeacherReferenceFilter == TeacherReferenceFilter.NonReferenced) Teachers = Teachers.Where(a => !a.IsInReference).AsQueryable(); if (request.BirthCertificateNumber.HasValue()) Teachers = Teachers.Where(a => a.BirthCertificateNumber == request.BirthCertificateNumber).AsQueryable(); if (request.PersonnelCode.HasValue()) Teachers = Teachers.Where(a => a.PersonnelCode == request.PersonnelCode).AsQueryable(); if (request.NationalCode.HasValue()) Teachers = Teachers.Where(a => a.NationalCode == request.NationalCode).AsQueryable(); if (request.FirstName.HasValue()) Teachers = Teachers.Where(a => a.FirstName.Contains(request.FirstName)).AsQueryable(); if (request.LastName.HasValue()) Teachers = Teachers.Where(a => a.LastName.Contains(request.LastName)).AsQueryable(); if (request.CollegiateOrderFrom.HasValue) Teachers = Teachers.Where(a => a.CollegiateOrder >= request.CollegiateOrderFrom.Value).AsQueryable(); if (request.CollegiateOrderTo.HasValue) Teachers = Teachers.Where(a => a.CollegiateOrder <= request.CollegiateOrderTo.Value).AsQueryable(); if (request.OccupationalGroupFrom.HasValue) Teachers = Teachers.Where(a => a.OccupationalGroup >= request.OccupationalGroupFrom.Value).AsQueryable(); if (request.OccupationalGroupTo.HasValue) Teachers = Teachers.Where(a => a.OccupationalGroup <= request.OccupationalGroupTo.Value).AsQueryable(); if (request.State.HasValue()) { Teachers = Teachers.Where(a => a.BirthPlaceState == request.State).AsQueryable(); if (request.City.HasValue()) Teachers = Teachers.Where(a => a.BirthPlaceCity == request.City).AsQueryable(); } if (request.PositionId.HasValue) Teachers = Teachers.Where(a => a.PositionId == request.PositionId.Value).AsQueryable(); if (request.TrainingCenter.HasValue) { Teachers = Teachers.Where(a => a.TrainingCourseId.HasValue) .Select(Teacher => new { Teacher, course = Teacher.TrainingCourse }) .Where(@a => @a.course.TrainingCenterId == request.TrainingCenter.Value) .Select(@b => @b.Teacher) .AsQueryable(); } Teachers = Teachers.OrderBy($"{request.CurrentSort} {request.SortDirection}"); var selectedTeachers = Teachers.ProjectTo<TeacherViewModel>(_mappingEngine); var query = await selectedTeachers .Skip((request.PageIndex - 1) * request.PageSize) .Take(request.PageSize) .ToListAsync(); return new TeacherListViewModel { SearchRequest = request, Teachers = query }; }