У меня есть следующие объекты:
И после нескольких объединяющихся сущностей:
- JobVolunteer
- JobTalent
- TalentVolunteer
И работа, и волонтер имеют несколько талантов. Я хочу найти все рабочие места, где их таланты совпадают с талантами волонтера.
Как я могу это сделать? На данный момент я использую следующий код, но в результате я получаю все задания, которые содержат один (или более) из необходимых талантов. Я хочу найти только рабочие места, где у Волонтера есть (по крайней мере) все необходимые таланты.
public async Task<IActionResult> FindJobs(int? id)
{
if (id == null)
{
return NotFound();
}
var volunteer = await _context.Volunteers
.Include(v => v.TalentVolunteers)
.ThenInclude(v => v.Talent)
.FirstOrDefaultAsync(m => m.VolunteerID == id);
if (volunteer == null)
{
return NotFound();
}
var jobs = new List<Job>();
var talentVolunteers = new HashSet<int>(volunteer.TalentVolunteers.Select(t => t.TalentID));
foreach (var talent in _context.JobTalents)
{
if (talentVolunteers.Contains(talent.TalentID))
{
var selectedJob = _context.Jobs
.Include(t => t.JobTalents)
.ThenInclude(v => v.Talent)
.SingleOrDefault(t => t.JobID == talent.JobID);
jobs.Add(selectedJob);
}
}
var volunteersFindJobsViewModel = _mapper.Map<Volunteer, VolunteersFindJobsViewModel>(volunteer);
volunteersFindJobsViewModel.Jobs = jobs;
return View(volunteersFindJobsViewModel);
}