【发布时间】:2016-10-02 11:57:24
【问题描述】:
我有以下 SQL 查询:
SELECT DISTINCT *
FROM Documents d
LEFT JOIN
Invoices
ON (i.invoicedocumentid = d.id or i.jobsheetdocumentid = d.id)
INNER JOIN
PurchaseOrders PO ON i.poid = PO.id
LEFT JOIN
HelpDeskFaults f
ON f.id = PO.helpDeskFaultId
LEFT JOIN stores s
ON s.id = f.storeid
WHERE s.name = 'Linden Drive'
OR d.id in (
SELECT u.id as 'docid'
FROM documents u
INNER JOIN stores s
ON u.storeid = s.id
WHERE s.name = 'Linden Drive'
)
ORDER BY d.Id
到目前为止,我的 linq 查询如下所示:
var documents = from doc in context.Documents
from invoice in context.Invoices
join po in context.PurchaseOrders on invoice.PurchaseOrder.PurchaseOrderId equals po.PurchaseOrderId
join hdf in context.HelpDeskFaults on po.HelpdeskFaultId equals hdf.ID into hdfpo
from hs in hdfpo.DefaultIfEmpty()
join store in context.Stores on hs.StoreID equals store.ID into hsstore
from hss in hsstore.DefaultIfEmpty()
where hss.Name.Contains(jobSearchParams.StoreName) && (invoice.InvoiceDocumentId == doc.ID || invoice.JobSheetInvoiceId == doc.ID)
select doc;
但是生成的sql和我预想的不一样。
谁能告诉我如何改进我的 linq 查询。
【问题讨论】:
-
是否及时返回正确结果?因为如果是这样,我就不会太担心 EF 生成的 SQL。
-
您也可以通过使用导航属性(如
from hs in po.HelpdeskFaults.DefaultIfEmpty())来简单地进行左连接 -
不,因为不返回任何结果。我现在不在工作,但 sql 已经很远了。我对左连接语法感到困惑
标签: c# entity-framework entity-framework-4