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()); }
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)); }