сравнивая два списка строк в C # - PullRequest
0 голосов
/ 09 октября 2018

Существуют кандидаты и вакансии:

public class Candidate
{
    public int CandidateId { get; set; }
    public string Name { get; set; }
    public string SkillTags { get; set; }

    public List<string> skillTagsList
    {
        get
        {               
            return Array.ConvertAll(SkillTags.Split(','), p => p.Trim()).ToList();
        }
    }
}

public class Job
{
    public int JobId { get; set; }
    public string Name { get; set; }
    public string Company { get; set; }
    public string Skills { get; set; }

    public List<string> skillsList
    {
        get
        {
            return Array.ConvertAll(Skills.Split(','), p => p.Trim()).ToList();
        }
    }
}

Для каждой работы я хочу получить кандидатов с наиболее подходящими навыками.Этот запрос LINQ возвращает ошибку.Есть ли лучший запрос LINQ для получения результатов?

List<Candidate> candidates = repository.GetCandidates().Result;
List<Job> jobs = repository.GetJobs().Result;
List<Candidate> JobCandidates = null;
jobs.ForEach(j =>
{
    JobCandidates = candidates.Where(c => c.skillTagsList.Any(st => j.skillsList.Contains(st.ToLower())));
}

1 Ответ

0 голосов
/ 09 октября 2018

Для каждого проекта задания (.Select) новый объект, содержащий задание и кандидата с наибольшим количеством совпадающих навыков (OrderDescendingBy количество пересечений):

var result = jobs.Select(j => new {
    Job = j,
    Candidate = candidates.OrderByDescending(c => c.skillTagsList.Intersect(j.skillsList).Count())
                          .First()
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...