Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

ApplicantExtensions.cs 3.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using static Diligent.WebAPI.Data.Entities.Applicant;
  2. namespace Diligent.WebAPI.Business.Extensions
  3. {
  4. public static class ApplicantExtensions
  5. {
  6. public static async Task<IQueryable<Applicant>> FilterApplicants(this IQueryable<Applicant> query,ApplicantFilterDto applicantFilterDto)
  7. {
  8. IQueryable<Applicant> resultQuery;
  9. resultQuery = query.FilterByExperience(applicantFilterDto.MinExperience, applicantFilterDto.MaxExperience)
  10. .FilterByEmploymentType(applicantFilterDto.EmploymentType)
  11. .FilterByDateOfApplication(applicantFilterDto.MinDateOfApplication, applicantFilterDto.MaxDateOfApplication);
  12. return FilterByTechnologies(await resultQuery.ToListAsync(), applicantFilterDto.Technologies);
  13. }
  14. public static IQueryable<Applicant> ApplyPagging(this IQueryable<Applicant> query, Pagination pagination)
  15. {
  16. return query.Skip((pagination.CurrentPage - 1) * pagination.PageSize)
  17. .Take(pagination.PageSize);
  18. }
  19. private static IQueryable<Applicant> FilterByExperience(this IQueryable<Applicant> query, int minExperience, int maxExperience)
  20. {
  21. if (minExperience == 0 && maxExperience == 0 || minExperience > maxExperience) return query;
  22. return query.Where(x => x.Experience >= minExperience && x.Experience < maxExperience);
  23. }
  24. private static IQueryable<Applicant> FilterByEmploymentType(this IQueryable<Applicant> query, string? employmentType)
  25. {
  26. if (employmentType == null) return query;
  27. return query.Where(x => x.TypeOfEmployment == Enum.Parse<TypesOfEmployment>(employmentType));
  28. }
  29. private static IQueryable<Applicant> FilterByDateOfApplication(this IQueryable<Applicant> query, DateTime? minDateOfApplication, DateTime? maxDateOfApplication)
  30. {
  31. if (minDateOfApplication == null) return query;
  32. if (minDateOfApplication > maxDateOfApplication) return query;
  33. if (maxDateOfApplication == null) return query.Where(x => x.DateOfApplication >= minDateOfApplication && x.DateOfApplication <= DateTime.Now);
  34. return query.Where(x => x.DateOfApplication >= minDateOfApplication && x.DateOfApplication < maxDateOfApplication);
  35. }
  36. private static IQueryable<Applicant> FilterByTechnologies(this List<Applicant> query, string[]? technologies)
  37. {
  38. if (technologies is null)
  39. {
  40. return query.AsQueryable();
  41. }
  42. List<Applicant> filteredApplicants = new();
  43. for (int i = 0; i < query.Count; i++)
  44. {
  45. for (int j = 0; j < query[i].TechnologyApplicants.Count; j++)
  46. {
  47. bool s = false;
  48. for (int n = 0; n < technologies.Length; n++)
  49. {
  50. if (query[i].TechnologyApplicants[j].Technology.Name.ToLower() == technologies[n].ToLower())
  51. {
  52. s = true;
  53. break;
  54. }
  55. }
  56. if (s)
  57. {
  58. filteredApplicants.Add(query[i]);
  59. break;
  60. }
  61. }
  62. }
  63. return filteredApplicants.AsQueryable();
  64. }
  65. }
  66. }