LINQ to SQL: Как проверить, существует ли какой-либо элемент в одной коллекции сущностей в другой коллекции сущностей? - PullRequest
2 голосов
/ 03 июля 2011

Я использую MVC2 и Entity Framework.

У меня есть 2 коллекции сущностей, и мне нужно сравнить их и проверить, есть ли у них какие-либо общие элементы. Например, скажем, у меня есть EntityCollection<Candidate> и EntityCollection<Job>. Я пытаюсь вернуть всех кандидатов, обладающих навыком, который указан в списке предпочтительных навыков работы. Это правильно:

public IQueryable<Candidate> GetMatchingCandidates(Job job)
{                
     return from candidate in _db.Candidates
     where (candidate.CandidateSkills.Where(c => job.JobPreferredSkills.Any(j => j.SkillId== c.SkillId)).Count() > 0) 
     select candidate;                                
}

Точно так же я хотел бы получить кандидатов, которые имеют ВСЕ навыки, которые перечислены в списке предпочтительных навыков.

1 Ответ

3 голосов
/ 03 июля 2011

Я бы использовал Any() в первом случае:

    public IQueryable<Candidate> GetMatchingCandidates(Job job)
    {
        return from candidate in _db.Candidates
               where (candidate.CandidateSkills.Any(c => job.JobPreferredSkills.Any(j => j.SkillId == c.SkillId)))
               select candidate;
    }

Затем используйте All() для вашего второго случая (все навыки должны быть в предпочтительных навыках)

    public IQueryable<Candidate> GetMatchingCandidates(Job job)
    {
        return from candidate in _db.Candidates
               where (candidate.CandidateSkills.All(c => job.JobPreferredSkills.Any(j => j.SkillId == c.SkillId)))
               select candidate;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...