public ActionResult Search(SearchModel searchModel) { var model = new SearchViewModel<MedicineLaboratoryViewModel>(); var query = from laboratory in this.db.Laboratories where laboratory.DoctorId == this.Doctor.Id select laboratory; if (!string.IsNullOrEmpty(searchModel.Term)) query = from laboratory in query where laboratory.Name.Contains(searchModel.Term) select laboratory; // 1-based page index var pageIndex = searchModel.Page; var pageSize = Constants.GRID_PAGE_SIZE; model.Count = query.Count(); model.Objects = (from m in query select new MedicineLaboratoryViewModel() { Id = m.Id, Name = m.Name, }).OrderBy(p => p.Name).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); return View(model); }
/// <summary> /// Searchs for patients /// </summary> /// <remarks> /// Requirements: /// - Should return a slice of the existing records matching the criteria corresponding to the specified 'Page' /// - Should return a result correspoding to all records when no search term is provided (respecting pagination) /// - In the result, the 'Count' property should consider all records /// - In the result, the list should bring only results corresponding to the specified page /// </remarks> public ActionResult Search(SearchModel searchModel) { var model = new SearchViewModel<PatientViewModel>(); var query = from patient in this.db.Patients.Include("Person") where patient.DoctorId == this.Doctor.Id select patient; if (!string.IsNullOrEmpty(searchModel.Term)) query = from patient in query where patient.Person.FullName.Contains(searchModel.Term) select patient; // 1-based page index var pageIndex = searchModel.Page; var pageSize = Constants.GRID_PAGE_SIZE; model.Count = query.Count(); model.Objects = (from p in query select new PatientViewModel() { Id = p.Id, // Note: this date is coming from the DB in Utc format, and must be converted to local time. DateOfBirth = p.Person.DateOfBirth, FullName = p.Person.FullName }) .OrderBy(p => p.FullName) .Skip((pageIndex - 1) * pageSize) .Take(pageSize) .ToList(); // Converting all dates from Utc to local practice time-zone. foreach (var eachPatientViewModel in model.Objects) eachPatientViewModel.DateOfBirth = ConvertToLocalDateTime(this.DbPractice, eachPatientViewModel.DateOfBirth); return this.View(model); }