2012-01-16 75 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)