6

LINQPad에서 다음 쿼리를 테스트했지만 정상적으로 실행되지만 VS2010에서는이 쿼리를 사용하지 않습니다.Linq 쿼리에서 'IN'및 'NOT IN'이 표시됩니다.

LINQ to Entities does not recognize the method 'Boolean Contains[String](System.Linq.IQueryable`1[System.String], System.String)' method, and this method cannot be translated into a store expression.

+0

.NET 3.5 또는 .NET 4.0을 타겟팅합니까? – DamienG

+0

vs 2010 .NET 4.0 x.JobId에서 – Kiddo

답변

8

사용 Queryable.Any<TSource> :

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)); 

나는 다음과 같은 오류가 발생했습니다. 대신이의

:

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

는이 작업을 수행 :

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

원래 쿼리에 대해 동일한 작업을 수행.

+0

오류 : 'string'에 'JobId'의 정의가없고 'string'유형의 첫 번째 인수를 허용하는 'JobId'확장명이 없습니다. – Kiddo

+0

그럼 새 항목 첫 번째 쿼리가 잘못되었습니다. 나는 당신이 원래 가지고 있던 쿼리에'topJobs'를 기반으로'JobId'를 선택했습니다. 'topTops' 질의는 선택/투영에서'JobId'를 리턴합니까? – RPM1984

관련 문제