2009-11-03 4 views
0

어떻게 엔티티Linq에 엔티티 : 하위 쿼리를 수행하는 방법에

SELECT * FROM TableA 
WHERE MyID IN 
(
    SELECT MyID 
    FROM TableB 
) 
것은 그것이 다른 테이블 만 외래 키가 포함되어 있기 때문에 TableB의 엔티티로 존재하지 않는다는 것입니다

LINQ를 함께이 쿼리를 할 수있는, TableA와 TableB 사이에는 직접적인 연결이 없습니다.

답변

1

TableB가 엔티티가 아니면, 내가 할 수있는 것이 확실하지 않습니다.

var tableAResults = from ta in db.TableA 
        where 
        (
         from tb in db.TableB 
         select db.MyID 
        ).Contains(ta.MyID) 
        select ta; 

: 당신이 당신의 모델이되도록, TableB의에게 기업을 한 경우 (이 정확히 정확하지만 개념은 소리를해야합니다 있는지 확실하지 않습니다) 다음과 같은 일을 할 수 있어야 EF v1.0을 사용하는 경우, 이러한 종류의 쿼리가 작동하지 않을 수 있습니다. EF v1.0에는 지원되는 linq 쿼리에 대한 몇 가지 중요한 제한이 있었으며 SQL 생성기는 끔찍했습니다. 나는 v1.0과 마찬가지로 EF v4.0 (.NET 4.0 베타 버전)에 대한 경험이별로 없지만 위의 쿼리가 가능해야한다고 생각하며 귀하와 매우 비슷한 것으로 번역되어야합니다. 원래의 SQL 쿼리.

(EF v1.0을 사용하는 경우 곧 EF v4.0으로 마이그레이션 할 계획을 세우고 .NET 4.0/VS2010이 종료 될 때까지 준비하십시오 .EF v1.0은 수많은 귀찮은 제한이 있습니다. , 어리석은 규칙, 등등 .. 이건 꽤 쓸만하다.)

+0

Any()를 사용하면 Contains()가 아닌 EF 1에서 정상적으로 작동합니다. 그러나 문제는 실제로 해결하기가 훨씬 쉽습니다. –

0

추정 표 B는 나타나지 않는데, 이는 다 대 다 관계의 일부이기 때문에

var q = from a in Context.TableA 
     where a.TableC.Any() // replace "TableC" with the relationship property name 
     select a; 

쉬운, 그러나 당신은 관계가 어떻게 작동하는지 주위에 당신의 머리를 얻을 필요가 : TableA의 일부 TableC는 (유일한 방법은 당신의 질문이 나에게 의미가 있습니다), 당신이 할 것입니다.

관련 문제