【问题标题】:Linq Query With Multiple Left Joins具有多个左连接的 Linq 查询
【发布时间】:2011-04-06 14:15:06
【问题描述】:

我对 Linq 非常陌生,但我必须将几个复杂的 SQL 查询转换为 Linq,所以我买了一份 Linqer。不幸的是,我知道有一个 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/

谢谢! 迈克

【问题讨论】:

    标签: .net sql linq tsql linq-to-sql


    【解决方案1】:

    您的 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 知道实体之间的关系。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-05
      • 2018-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-13
      相关资源
      最近更新 更多