2009-04-28 5 views
0

I가 다음과 같은 SQL 문을 변환하는 데 문제가 LINQ - 투 - 엔티티 :LINQ - 투 - 엔티티

LINQ에서
SELECT l.* 
FROM locations l 
WHERE l.id NOT IN (/* array of ids */) 

, 내가 좋아하는 뭔가를보고 싶다

IQueryable<Location> locationQuery = from l in DataContext.Location 
            where !myCollection.Contains(l) 
            select l; 

하지만 그 때문에 포함되지 (내가보기로) LINQ - 투 - 엔티티에 사용할 수없는 것 (myCollection 항목의 일반적인 목록입니다 제외한다). 최선/가장 가까운 LINQ 시도, 나는 위치의 내 컬렉션 (목록)을하고 난이 데이터베이스에서 기존의 모든 위치 검색하는 DataContext를 :

List<Location> Route = new List<Location>(); 

// Some code to add Location entities from the DB to the Route collection 

var innerQuery = from p in Route 
       select p.ID; 

IQueryable<Location> locationQuery = from l in DataContext.Location 
            where !((innerQuery).Any(k => k == l.ID)) 
            select l; 

가 분명히 나는 ​​모든 위치를 얻으려면을 DB는 내 로컬 컬렉션에 없습니다. 그러나 코드는 다음과 같은 NotSupportedException을 발생시킵니다.

'Closure type'유형의 상수 값을 생성 할 수 없습니다. 이 컨텍스트에서는 원시 형식 (예 : 'Int32, String 및 Guid') 만 지원됩니다.

나는 다른 접근법을 사용하여 주변을 둘러 보았지만 작동시키지 못했습니다. 이제 LINQ-to-entities가 위의 오류를 설명 할 수있는 상위 수준의 비교 (개체 수준)를 수행 할 수 없다는 사실을 읽었습니다.

내 실제 질문은 LINQ에서 SQL로 그렇게 쉽게 할 수있는 방법은 무엇입니까? 난 단지 DB에서 엔터티를 제외하고 로컬 (비 DB) 컬렉션에있는 엔터티를 제외하고 싶다.

+0

오신 것을 환영합니다, 내가 여기에 비슷한 변환 문제를 제기 LINQ - 투 - SQL 기능의 절반 아니지만 ... –

+0

에 대한 대체; http://stackoverflow.com/questions/4093592/how-to-lookup-entities-in-entityframework-4-by-a-finder-interface-works-in-linq 나는 아직 해결할 운이 없었습니다. EF에서 할 수없는 LinqToSql에서 할 수있는 일이 많이 있습니다. 그것은 매우 짜증나거나 실망 스럽습니다. 귀하의 질문은 조금 다르지만 최종 결과는 유사합니다. 내가 한 것보다 더 많은 성공을 거둘 수 있기를 바랍니다. –

답변

2

이 게시물보십시오 : LINQ - 투 - 엔티티에 "NOT IN" clause in LINQ to Entities

+0

그 링크를 가져 주셔서 감사합니다. http://blogs.msdn.com/phaniraj/archive/2008/07/17/set-based-operations-in-ado-net-data-services로 이동했습니다. aspx. 내가 그런 식으로 일할 수도 있겠지만, 쉬지 않고 (당연한 일이 아닙니다!), 사소한 일을하는 덜 복잡한 방법이 있지 않습니까? – pyrocumulus

관련 문제