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

时间:2011-07-03 16:52:48

标签: .net asp.net-mvc linq entity-framework 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;                                
}

同样,我也希望获得具有所有技能的候选人。

1 个答案:

答案 0 :(得分:3)

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