我正在努力学习如何编写以下等效的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
答案 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)