具有多个左连接的Linq查询



我是Linq的新手,但我必须将几个复杂的SQL查询转换为Linq,所以我买了一个Linq的副本。不幸的是,我知道有一个SQL查询Linqer不能转换为Linq,因为Linqer不能转换SQL与子连接。我希望有人能帮助我这个SQL查询的Linq代码:

SELECT v.*, rci.CustomId, ci.EntryTime As CheckInTime, ci.Operator As CheckInOperator, 
    cis.Name As CheckInStation, co.EntryTime As CheckOutTime, co.Operator As CheckOutOperator, 
    cos.Name As CheckOutStation, cat.Name As Category, clr.Name As Clearance, r.ReasonForVisit As Reason, 
    s.SiteId + ' -- ' + s.SiteName As Site, e.LastName + ', ' + e.FirstName As Employee 
    FROM ((((((((((Visitor v LEFT JOIN VisitorEntry ci ON v.CheckInId = ci.Id) 
    LEFT JOIN VisitorEntry co ON v.CheckOutId = co.Id) 
    LEFT JOIN Station cis ON ci.StationId = cis.Id) 
    LEFT JOIN Station cos ON co.StationId = cos.Id) 
    LEFT JOIN Category cat ON v.CategoryId = cat.Id) 
    LEFT JOIN Clearance clr ON v.ClearanceId = clr.Id) 
    LEFT JOIN Reason r ON v.ReasonId = r.Id) 
    LEFT JOIN Site s ON v.SiteId = s.Id) 
    LEFT JOIN Employee e ON v.EmployeeId = e.Id) 
    LEFT JOIN RecordCustomId rci ON v.Id = rci.ParentId) 
    WHERE 1=1 

(我有几个SQL查询类似于这个,我需要转换成Linq,所以这就是为什么我在查询中有"WHERE"占位符。)

我也一直在看这篇博客文章,但我仍然很难理解如何翻译我的查询:http://codingsense.wordpress.com/2009/06/16/multiple-list-left-join-in-linq/

谢谢!迈克

什么是所有这些括号在你的SQL的点,他们似乎没有做任何事情,你没有得到完全相同的结果,如果他们被删除?您可以使用DefaultIfEmpty方法在linq中执行左连接。我假定你正在使用LinqToSql?下面是我最近在

上做的一个项目的例子
return from app in pi_GetApplications()
       from names in app.tContact.tNames // Inner Join
       from addr in app.tContact.tAddresses.DefaultIfEmpty() // Left Outer Join
       select app;

这里假设您已经在DBML文件中定义了外键的关联,以便LinqtoSql知道实体是如何关联的。

相关内容

  • 没有找到相关文章