コード例 #1
0
 private IPredicate FilterByUsername(DoctorFilterDto filter)
 {
     if (string.IsNullOrWhiteSpace(filter.Username))
     {
         return(null);
     }
     return(new SimplePredicate(nameof(Doctor.Username), ValueComparingOperator.Equal, filter.Username));
 }
コード例 #2
0
        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));
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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));
        }
コード例 #5
0
        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));
        }
コード例 #6
0
        public async Task <ActionResult <IEnumerable <DoctorGridDto> > > GetDoctors(DoctorFilterDto doctorFilterDto)
        {
            var doctors = await _doctorRepository.GetDoctors(doctorFilterDto);

            return(Ok(doctors));
        }