2012-01-16 4 views
0

저는 LINQ와 동등한 아래 코드를 작성하는 방법에 어려움을 겪고 있습니다. 정말 나는 내가 INNER JOIN() 부분을 어떻게 표현하는지 고민 중이다. 그것은 중첩 된 가입이라고 불 렸니? 익명 가입? 나는 심지어 확신하지 않는다. 어쨌든, 사실을 지적 할 수있는 사람에게 큰 감사를드립니다. 그것이 단지 부름을 받았을지라도 나는 적절하게 그것을 구울 수 있습니다.INNER JOIN()을 사용하여 SQL을 LINQ로 변환 하시겠습니까?

var query = from c in context.TableA 
join GetData(c.PrimaryKeyValue) 
+1

이렇게 보시면 도움이 될 것 같습니다 : http://weblogs.asp.net/rajbk/archive/2010/03/12/joins-in-linq-to-sql .aspx – David

+0

@David : 내 무지가 내가 뭔가 묻고있는 것을 이해하지 못하게하지 않는 한, 내가 묻는 것에 대한 어떤 예도 볼 수 없지만 좋은 사이트처럼 보입니다. :) –

답변

4

단지 내부를 넣어 :

private static IEnumerable<Table> GetData(int joinKey) 
    { 
     return (from x in context.TableB.Where(id => id.Key == joinKey select x).AsQueryable(); 
    } 

그런 다음 당신이 당신의 정상적인 쿼리를 수행 할 수 있습니다

SELECT p.PersonID, p.FirstName, p.MiddleName, p.LastName, cp.EnrollmentID, cp.EnrollmentDate, cp.DisenrollmentDate 
FROM vwPersonInfo AS p 
    INNER JOIN (
    SELECT c.ClientID, c.EnrollmentID, c.EnrollmentDate, c.DisenrollmentDate 
    FROM tblCMOEnrollment AS c 
     LEFT OUTER JOIN tblWorkerHistory AS wh 
     ON c.EnrollmentID = wh.EnrollmentID 
      INNER JOIN tblStaffExtended AS se 
      ON wh.Worker = se.StaffID 
    WHERE (wh.EndDate IS NULL OR wh.EndDate >= getdate()) 
    AND wh.Worker = --WorkerID Param Here 
) AS cp 
ON p.PersonID = cp.ClientID 
ORDER BY p.PersonID 
+0

That worked , 감사! –

0

나는 당신이 두 번째 방법을 작성하고 그 방법에 합류하여이 작업을 수행 할 수 있다고 생각 자체 변수로 질의한다. (하나의 단일 SQL 표현식으로 변환됩니다)

var innerQuery = from x in db.tblCMOEnrollment 
       where ... 
       select ...; 

var query = from a in vwPersonInfo 
      join b innerQuery on p.PersonID equals cp.ClientID 
      select ...;