2012-01-16 76 views
0

我與如何寫下面等同LINQ掙扎。真的,我想我只是在努力代表INNER JOIN()部分。這是否被稱爲嵌套加入?匿名加入?我甚至不確定。無論如何,非常感謝任何能指出我真實的人。即使它只是這個名字,所以我可以正確地使用它。使用INNER JOIN()將SQL轉換爲LINQ?

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 
+1

這看起來有所幫助:http://weblogs.asp.net/rajbk/archive/2010/03/12/joins-in-linq-to-sql的.aspx – David 2012-01-16 18:45:07

+0

@大衛:看起來像一個不錯的網站,雖然我看不出有什麼我問,除非我的無知導致了我不明白的東西有什麼,我問的任何例子.... :) – 2012-01-16 18:52:08

回答

4

只是把內查詢自己的變量。 (它會被轉換成一個單一的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 ...; 
+0

這工作, 謝謝! – 2012-01-16 19:51:03

0

我想你可以通過編寫第二種方法,並加入了關於該方法做到這一點:

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

然後,你可以做你的正常查詢:

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