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

ApplicantExtensions.cs 3.6KB

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