private IPredicate FilterByUsername(DoctorFilterDto filter) { if (string.IsNullOrWhiteSpace(filter.Username)) { return(null); } return(new SimplePredicate(nameof(Doctor.Username), ValueComparingOperator.Equal, filter.Username)); }
private IPredicate FilterBySpecialization(DoctorFilterDto filter) { if (string.IsNullOrWhiteSpace(filter.Specialization)) { return(null); } var specialization = Enum.Parse(typeof(Specialization), filter.Specialization, true); return(new SimplePredicate(nameof(Doctor.Specialization), ValueComparingOperator.Equal, specialization)); }
public async Task <IEnumerable <DoctorGridDto> > GetDoctors(DoctorFilterDto doctorFilterDto) { var query = _context.Doctors.Include(c => c.Photos).AsQueryable(); query = query.Where(c => c.User.IsAccountLocked != true); if (doctorFilterDto.Id != 0) { query = query.Where(c => c.Id == doctorFilterDto.Id); } else { if (!string.IsNullOrEmpty(doctorFilterDto.FirstName)) { query = query.Where(c => c.FirstName.Contains(doctorFilterDto.FirstName)); } if (!string.IsNullOrEmpty(doctorFilterDto.SecondName)) { query = query.Where(c => c.SecondName.Contains(doctorFilterDto.SecondName)); } if (!string.IsNullOrEmpty(doctorFilterDto.Email)) { query = query.Where(c => c.Email.Contains(doctorFilterDto.Email)); } } var result = await query.OrderBy(c => c.Id) .Select(c => new DoctorGridDto() { Id = c.Id, FirstName = c.FirstName, SecondName = c.SecondName, UserName = c.User.UserName, Email = c.Email, DateOfBirth = c.DateOfBirth.ToString(), Age = c.DateOfBirth.CalculateAge(), MainPhotoUrl = c.Photos.FirstOrDefault(c => c.IsMain == true).Url }) .ToListAsync(); if (doctorFilterDto.Age != 0) { result = result.Where(c => c.Age == doctorFilterDto.Age).ToList();; } return(result); }
protected override IQuery <Doctor> ApplyWhereClause(IQuery <Doctor> query, DoctorFilterDto filter) { var definedPredicates = new List <IPredicate>(); AddIfDefined(FilterByUsername(filter), definedPredicates); AddIfDefined(FilterByName(filter), definedPredicates); AddIfDefined(FilterBySpecialization(filter), definedPredicates); if (definedPredicates.Count == 0) { return(query); } if (definedPredicates.Count == 1) { return(query.Where(definedPredicates.First())); } var wherePredicate = new CompositePredicate(definedPredicates); return(query.Where(wherePredicate)); }
private IPredicate FilterByName(DoctorFilterDto filter) { if (string.IsNullOrWhiteSpace(filter.FullName)) { return(null); } char[] delim = { ' ' }; var trimmedName = filter.FullName.Trim(); string[] name = trimmedName.Split(delim, 2); if (name.Length != 2) { return(null); } var predicates = new List <IPredicate> { new SimplePredicate(nameof(Doctor.Name), ValueComparingOperator.Equal, name[0]), new SimplePredicate(nameof(Doctor.Surname), ValueComparingOperator.Equal, name[1]) }; return(new CompositePredicate(predicates)); }
public async Task <ActionResult <IEnumerable <DoctorGridDto> > > GetDoctors(DoctorFilterDto doctorFilterDto) { var doctors = await _doctorRepository.GetDoctors(doctorFilterDto); return(Ok(doctors)); }