使用INNER JOIN()将SQL转换为LINQ?

时间:2012-01-16 18:43:40

标签: c# linq linq-to-sql

我正在努力学习如何编写以下等效的LINQ。真的,我想我只是在努力解决INNER JOIN ()部分的问题。这称为嵌套加入吗?匿名加入?我甚至都不确定。无论如何,非常感谢能够指出我真实的人。即使这就是所谓的,所以我可以正确地对它进行。

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

2 个答案:

答案 0 :(得分: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 ...;

答案 1 :(得分: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)