首页 文章

在Linq查询中'IN'&'NOT IN'

提问于
浏览
6

我在LINQPad中测试了以下查询,它运行正常,但VS2010不喜欢它 .

var topJobs = from j in streetlightDBEntities.Job
    let mjobid = from m in streetlightDBEntities.Job.Include("Streetlight")
                 where m.Streetlight.StreetlightId == j.Streetlight.StreetlightId
                 orderby m.DateCompleted descending
                 select m.JobId
        where mjobid.Take(5).Contains(j.JobId)
        select j.JobId;

var notTopJobs = streetlightDBEntities.Job.Where(c => !topJobs.Contains(c.JobId));

我收到以下错误:

LINQ to Entities无法识别方法'Boolean Contains [String](System.Linq.IQueryable`1 [System.String],System.String)'方法,并且此方法无法转换为商店表达式 .

1 回答

  • 8

    使用Queryable.Any<TSource> .

    而不是这个:

    var notTopJobs = streetlightDBEntities
          .Job
          .Where(c => !topJobs.Contains(c.JobId));
    

    做这个:

    var notTopJobs = streetlightDBEntities
          .Job
          .Where(c => !topJobs.Any(x => x.JobId == c.JobId))
    

    对原始查询执行相同操作 .

相关问题