34
Ich habe diese Abfrage in SQL, und ich möchte es in LINQ mit Entity Framework implementieren, aber wie kann ich mehrere Tabellen linken äußeren Joins anwenden?LINQ to SQL mehrere Tabellen linken äußeren Join
SELECT d.bookingid,
d.labid,
d.processid,
p.prid,
p.prno,
d.DestinationBranchID,
d.SendStatus
FROM dc_tpatient_bookingd d
LEFT OUTER JOIN dc_tpatient_bookingm m ON d.bookingid = m.bookingid
LEFT OUTER JOIN dc_tpatient p ON p.prid = m.prid
LEFT OUTER JOIN dc_tp_test t ON d.testid = t.testid
LEFT OUTER JOIN dc_tp_groupm gm ON t.groupid = gm.groupid
LEFT OUTER JOIN dc_tpanel pn ON m.panelid = pn.panelid
LEFT OUTER JOIN dc_tp_organization og ON og.orgid = m.clientid
LEFT OUTER JOIN dc_tp_ward w ON w.wardid = m.wardid
LEFT OUTER JOIN dc_tp_branch tb ON tb.BranchID = m.BranchID
WHERE d.processid = 6
AND ((m.branchId = 1
AND d.DestinationBranchID = 0)
OR (d.DestinationBranchID = 1
AND d.sendstatus = 'R'))
AND d.testid IN (SELECT testid
FROM dc_tp_test
WHERE subdepartmentid = 13)
AND date_format(m.enteredon, '%Y/%m/%d') BETWEEN '2013/06/15' AND '2013/06/15'
GROUP BY m.bookingid
ORDER BY d.priority DESC,
m.bookingid ASC
Wie behandelt man das Datum? @lazyberezovsky –
@EhsanSajjad willkommen :) Ich habe gerade Abfrage getestet und ein Problem gefunden - wenn Sie linken äußeren Join tun, dann können einige der Werte 'p, m' null sein. Es ist OK für die einfache Auswahl, aber wenn Sie eine Gruppierung durchführen, können Sie etwas wie "null kann Int32 nicht zugewiesen werden" sehen. Also hier ist eine Problemumgehung - wenn Sie ein anonymes Objekt auswählen, tun Sie 'prno = p == null? 0: p.prno'. Das macht den Trick –
@EhsanSajjad, um Datum zu behandeln, das Gebrauch verwendet [EntityFunctions.TruncateTime Methode] (http://msdn.microsoft.com/en-us/library/system.data.objects.entityfunctions.truncatetime.aspx) –