示例#1
0
        public static string GetQueryString(EmployeeFilterParams fp)
        {
            var sb = new StringBuilder();

            if (fp.MinAge.HasValue)
            {
                sb.AppendFormat("minAge={0}", fp.MinAge.Value);
            }

            if (sb.Length > 0)
            {
                sb.Append("&");
            }

            if (fp.MaxAge.HasValue)
            {
                sb.AppendFormat("maxAge={0}", fp.MaxAge.Value);
            }

            if (sb.Length > 0)
            {
                sb.Append("&");
            }

            if (fp.MinExperience.HasValue)
            {
                sb.AppendFormat("minExperience={0}", fp.MinExperience.Value);
            }

            if (sb.Length > 0)
            {
                sb.Append("&");
            }

            if (fp.MaxExperience.HasValue)
            {
                sb.AppendFormat("maxExperience={0}", fp.MaxExperience.Value);
            }

            if (sb.Length > 0)
            {
                sb.Append("&");
            }

            if (fp.Position != null)
            {
                sb.AppendFormat("position={0}", fp.Position);
            }

            //var url = $"minAge={fp.MinAge}&maxAge={fp.MaxAge}&minExperience={fp.MinExperience}&maxExperience={fp.MaxExperience}&position={fp.Position}";

            return(sb.ToString());
        }
        public async Task <IEnumerable <Employee> > GetEmployeesAsync(EmployeeFilterParams fp)
        {
            var predicate = PredicateBuilder.New <Employee>(true);

            //
            // Задан фильтр по должности
            if (!string.IsNullOrEmpty(fp.Position))
            {
                predicate.And(x => x.Position.Equals(fp.Position, StringComparison.CurrentCultureIgnoreCase));
            }

            //
            // Задан фильтр по возрасту
            // Сотрудники старше чем minAge и младше чем maxAge, то есть minAge и больше лет и строго меньше maxAge
            if (fp.MinAge.HasValue && fp.MaxAge.HasValue)
            {
                predicate.And(x => x.Age >= fp.MinAge.Value && x.Age < fp.MaxAge.Value);
            }
            // Сотрудники старше чем minAge, то есть minAge и больше лет
            else if (fp.MinAge.HasValue)
            {
                predicate.And(x => x.Age >= fp.MinAge.Value);
            }
            // Сотрудники младше чем maxAge, то есть строго меньше чем maxAge
            else if (fp.MaxAge.HasValue)
            {
                predicate.And(x => x.Age < fp.MaxAge.Value);
            }

            //
            // Задан фильтр по стажу работы в компании
            // Сотрудники со стажем работы в компании более minExperience и менее maxExperience лет
            if (fp.MinExperience.HasValue && fp.MaxExperience.HasValue)
            {
                predicate.And(x => x.Experience >= fp.MinExperience.Value && x.Experience < fp.MaxExperience.Value);
            }
            // Сотрудники со стажем работы в компании более minExperience лет
            else if (fp.MinExperience.HasValue)
            {
                predicate.And(x => x.Experience >= fp.MinExperience.Value);
            }
            // Сотрудники со стажем работы в компании менее maxExperience лет
            else if (fp.MaxExperience.HasValue)
            {
                predicate.And(x => x.Experience < fp.MaxExperience.Value);
            }

            return(await Context.Employees.Where(predicate).ToListAsync());
        }
示例#3
0
        public static EmployeeFilterParams GetandomEmployeeFilterParams()
        {
            var fp = new EmployeeFilterParams();

            var minAge = 16;
            var maxAge = 60;

            fp.MinAge = rnd.Next(minAge - 1, maxAge + 2);
            // Если сгенеровалось число (minAge-1), пусть в фильтре параметр MinAge будет не задан
            if (fp.MinAge == minAge - 1)
            {
                fp.MinAge = null;
            }

            fp.MaxAge = rnd.Next(minAge - 1, maxAge + 2);
            // Если сгенеровалось число (maxAge+1), пусть в фильтре параметр MaxAge будет не задан
            if (fp.MaxAge == maxAge + 1)
            {
                fp.MaxAge = null;
            }

            if (fp.MinAge.HasValue && fp.MaxAge.HasValue && fp.MinAge > fp.MaxAge)
            {
                var age = fp.MinAge;

                fp.MinAge = fp.MaxAge;
                fp.MaxAge = age;
            }

            var minExp = 0;
            var maxExp = 40;

            fp.MinExperience = rnd.Next(minExp - 1, maxExp + 2);
            // Если сгенерировалось число (minExp-1), пусть в фильтре параметр MinExperience будет не задан
            if (fp.MinExperience == minExp - 1)
            {
                fp.MinExperience = null;
            }

            fp.MaxExperience = rnd.Next(minExp - 1, maxExp + 2);
            // Если сгенерировалось число (maxExp+1), пусть в фильтре параметр MaxExperience будет не задан
            if (fp.MaxExperience == maxExp + 1)
            {
                fp.MaxExperience = null;
            }

            if (fp.MinExperience.HasValue && fp.MaxExperience.HasValue && fp.MinExperience > fp.MaxExperience)
            {
                var exp = fp.MinExperience;

                fp.MinExperience = fp.MaxExperience;
                fp.MaxExperience = exp;
            }

            var count = rnd.Next(-1, Positions.Count());

            // Если сгенерировалось число -1, ...
            if (count == -1)
            {
                // ... пусть в фильтре параметр Position будет не задан
                fp.Position = null;
            }
            else
            {
                // ... иначе берем элемент с номером count
                fp.Position = Positions.Skip(count).FirstOrDefault();
            }

            return(fp);
        }
 //
 // GET: api/Employees
 public async Task <IEnumerable <Employee> > GetEmployees([FromUri] EmployeeFilterParams filterParams)
 {
     return(await Repository.GetEmployeesAsync(filterParams));
 }