.net - 使用 linq 和 sql 比较两个列表

标签 .net asp.net asp.net-mvc linq entity-framework

假设我有两个列表:

List<CanidateSkill> canidateSkills;
List<JobDesiredSkill> desiredSkills;

class CanidateSkill
{
    public Guid CanidateId { get; set; }
    public Guid SkillId { get; set; }
}

class JobDesiredSkill
{
    public Guid JobId { get; set; }
    public Guid SkillId { get; set; }
}

您如何确定:
  • JobDesiredSkills 中至少一项包含在 CandidateSkills 中(与 SkillId 匹配)
  • JobDesiredSkills 中的所有项目都包含在 CandidateSkills


  • 我试过这个,但得到这个错误:无法创建类型的常量值 在此上下文中仅支持原始类型(“例如 Int32、String 和 Guid”)。
     return from candidate in _db.Candidates                           
     where (candidate.CandidateSkills.Any(c => job.JobDesiredSkills.Any(j => j.SkillId == c.SkillId))) 
     select candidate;
    

    我也试过这个,但包含需要一个 JobDesiredSkill 对象,但 c 是一个 CandidateSkillObject。
     return from candidate in _db.Candidates                           
     where CandidateSkills.Any(c => JobDesiredSkills.Contains(c)) 
     select candidate;
    

    谢谢

    最佳答案

    有两种 linq 方法可以满足您的确切需求:

  • IEnumerable.Any()
  • IEnumerable.All()

  • 编辑:

    您需要在集合中选择“Ids”的“投影”以获取它们的可枚举集合,然后您可以在这些集合上使用 any/all (您不能在没有显式比较对象的情况下比较复杂类型)。

    这是一个简单的例子,我希望它有所帮助。
    List<Guid> skills = 
        new List<Guid>( Enumerable.Range( 0, 20 ).Select( n => Guid.NewGuid() ) );
    
    List<CanidateSkill> canidateSkills = new List<CanidateSkill>
    (
        Enumerable.Range( 0, 10 ).Select( c => new CanidateSkill() { CanidateId = Guid.NewGuid(), SkillId = skills.ElementAt( c ) } )
    );
    
    List<JobDesiredSkill> desiredSkills = new List<JobDesiredSkill>
    (
        Enumerable.Range( 5, 15 ).Select( d => new JobDesiredSkill() { JobId = Guid.NewGuid(), SkillId = skills.ElementAt( d ) } )
    );
    
    var anyDesiredSkills = canidateSkills.Any( c => desiredSkills.Select( ds => ds.SkillId ).Contains( c.SkillId ) ); // true
    var allDesiredSkills = canidateSkills.All( c => desiredSkills.Select( ds => ds.SkillId ).Contains( c.SkillId ) ); // false
    

    (注意:我还编辑了您的问题以更新此代码中使用的示例类,希望您不介意。)

    关于.net - 使用 linq 和 sql 比较两个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6657915/

    相关文章:

    c# - Entity Framework Core 2.1 group by 无法正常工作

    html - 向我的验证消息 ASP.Net MVC 添加换行符

    asp.net-mvc - MVC 区域错误处理

    jquery - getJSON 回调未触发

    c# - 为什么不针对字段优化简单属性?

    c# - 通过网络代理使用 Azure KeyVault 配置提供程序会引发 HTTP 407 异常

    c# - 如何在 WebAPI 中返回 404 和 403 的 json?

    asp.net - 使用嵌套对象在 Linq 中将 IQueryable<Entity> 映射到 IQueryable<DTO>

    html - html 元标记的顺序重要吗?

    c# - 将 Web API Controller 添加到不同的程序集