34
Mam to zapytanie w SQL i chcę go zaimplementować w LINQ przy użyciu Entity Framework, ale jak mogę zastosować wiele tabel lewe sprzężenia zewnętrzne?LINQ do SQL wielu tabel lewe zewnętrzne sprzężenie
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
jak poradzić sobie z datą? @lazyberezovsky –
@EhsanSajjad mile widziane :) Właśnie testowałem zapytanie i znalazłem jeden problem - po zakończeniu łączenia zewnętrznego niektóre wartości 'p, m' mogą mieć wartość null. Jest OK dla prostego wyboru, ale kiedy robisz grupowanie, możesz zobaczyć coś takiego jak "null nie może być przypisane do Int32". A więc oto sposób obejścia problemu - przy wyborze anonimowego obiektu należy "prno = p == null"? 0: p.prno'. To zadziała –
@ EhsanSajjad, aby poradzić sobie z korzystaniem z daty użycia [metoda EntityFunctions.TruncateTime] (http://msdn.microsoft.com/en-us/library/system.data.objects.entityfunctions.truncatetime.aspx) –