public async Task <IActionResult> Students(StudentsSearchRequest searchRequest) { var model = new StudentSearchModel(); if (searchRequest != null) { var searchParameters = RequestParameters.CreateFromModel(searchRequest); // Generates url parameters from searchRequest object searchParameters.Add("Test", true); // Also, you can specify additional parameters var response = await GetRequest($@"{_settings.Value.ApiUrl}/api/Student/search", searchParameters); var responseObject = JsonConvert.DeserializeObject <StudentsSearchResponse>( await response.Content.ReadAsStringAsync()); model.SearchResult = responseObject.Students; } model.SearchParameters = searchRequest; var gradeResponse = await GetRequest($@"{_settings.Value.ApiUrl}/api/Grade/get-all"); var greadesList = JsonConvert.DeserializeObject <List <Grade> >( await gradeResponse.Content.ReadAsStringAsync()); model.AvailableGrades = greadesList.Select(x => new SelectListItem(x.GradeName, x.Id.ToString(), searchRequest.SelectedGradeIds == null ? false : searchRequest.SelectedGradeIds.Contains(x.Id))).ToList(); return(View(model)); }
public async Task <StudentInfo[]> Search(StudentsSearchRequest request) { IQueryable <DbStudent> query = GetFilteredQuery(request); var withGroups = from q in query join sg in _context.StudentGroups on q.Id equals sg.StudentId into sgs from sg in sgs.DefaultIfEmpty() join g in _context.Groups on sg.GroupId equals g.Id into gs from g in gs.DefaultIfEmpty() select new { Student = q, Group = g.Name }; var listGroups = await withGroups.ToListAsync(); var grouped = from s in listGroups group s by s.Student into g select new { Student = g.Key, Groups = g.Select(x => x.Group) }; return(grouped.Select(x => new StudentInfo { Id = x.Student.Id, FIO = $"{x.Student.LastName} {x.Student.FirstName} {x.Student.MiddleName}", UniqueCode = x.Student.UniqueCode, Groups = string.Join(", ", x.Groups) }).ToArray()); }
private IQueryable <DbStudent> GetFilteredQuery(StudentsSearchRequest request) { var query = _context.Students.AsQueryable(); if (!string.IsNullOrEmpty(request.FIO)) { query = query.Where(x => x.FirstName.Contains(request.FIO) || x.LastName.Contains(request.FIO) || x.MiddleName.Contains(request.FIO)); } if (!string.IsNullOrEmpty(request.UniqueCode)) { query = query.Where(x => x.UniqueCode == request.UniqueCode); } if (!string.IsNullOrEmpty(request.Gender)) { query = query.Where(x => x.Gender == request.Gender); } if (!string.IsNullOrEmpty(request.GroupName)) { var studentsInGroup = from sg in _context.StudentGroups join g in _context.Groups on sg.GroupId equals g.Id where g.Name == request.GroupName select sg.StudentId; query = query.Where(x => studentsInGroup.Contains(x.Id)); } return(query.OrderBy(x => x.Id).Skip(request.PageSize * (request.PageNumber - 1)).Take(request.PageSize)); }
public StudentsSearchResponse SearchStudents([FromQuery] StudentsSearchRequest request, [FromQuery] bool test) { var students = _studentRepository.GetAllQ(); if (request.HeightFrom != null) { students = students.Where(x => x.Height > request.HeightFrom); } if (request.HeightTo != null) { students = students.Where(x => x.Height < request.HeightTo); } if (request.WeightFrom != null) { students = students.Where(x => x.Weight > request.WeightFrom); } if (request.WeightTo != null) { students = students.Where(x => x.Weight < request.WeightTo); } if (!String.IsNullOrEmpty(request.NameSearchText)) { students = students.Where(x => x.StudentName.Contains(request.NameSearchText) || request.NameSearchText.Contains(x.StudentName)); } if (request.SelectedGradeIds != null && request.SelectedGradeIds.Count > 0) { students = students.Where(x => request.SelectedGradeIds.Contains(x.GradeId)); } var searchResponse = new StudentsSearchResponse(); searchResponse.Students = students.ToList(); return(searchResponse); }
public async Task <StudentInfo[]> GetStudents(StudentsSearchRequest request) { return(await _studentsRepository.Search(request)); }
public async Task <ActionResult <StudentInfo[]> > GetStudents([FromQuery] StudentsSearchRequest request) { return(await _educationService.GetStudents(request)); }