2011-04-06 8 views
0

Je suis très novice avec Linq, mais je dois convertir plusieurs requêtes SQL compliquées en Linq, donc j'ai acheté une copie de Linqer. Malheureusement, je sais avoir une requête SQL Linqer ne peut pas convertir en Linq car Linqer ne peut pas convertir SQL avec des sous-jointures. J'espère que quelqu'un peut me aider avec le code Linq pour cette requête SQL:Linq Query avec plusieurs jointures à gauche

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 

(j'ai plusieurs requêtes SQL similaires à celui-ci que je dois convertir en Linq c'est pourquoi je le « où » espace réservé dans la requête)

aussi j'ai regardé ce blog mais je suis encore avoir du mal à comprendre comment traduire ma requête. http://codingsense.wordpress.com/2009/06/16/multiple-list-left-join-in-linq/

Merci! Mike

Répondre

2

Quel est le point de toutes ces parenthèses dans votre SQL, ils ne semblent pas faire quoi que ce soit, n'obtenez-vous pas exactement le même résultat s'ils sont supprimés? Vous utilisez la méthode DefaultIfEmpty pour faire des jointures à gauche dans linq. Je suppose que vous utilisez LinqToSql? Ci-dessous, dans un exemple d'un projet récent que je travaille sur

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; 

Cela suppose que vous avez les associations pour les clés étrangères définies dans votre fichier DBML afin que LinqToSql sait comment les entités sont liées.

Questions connexes