LINQ to SQL:如何检查一个实体集合中的任何项是否存在于另一个实体集合中



我正在使用MVC2和实体框架。

我有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;                                
}

同样,我也希望候选人拥有所有在首选技能中列出的技能。

我将在第一种情况下使用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;
    }

最新更新