how to use left join in entity framework query?
本问题已经有最佳答案,请猛点这里访问。
我正在使用实体框架4.5。我必须将SQL查询转换为实体查询:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | SELECT Customer.CustCode, Invoice.InvoiceId, Invoice.BatchNumber, Invoice.InvoiceDate, Invoice.AdjustFlag, Invoice.InvoiceAmount, Invoice.InvoiceNote, Invoice.AmountPaid, Customer.BillingContact, Customer.BillingCompany, Customer.BillingStreet1, Customer.BillingStreet2, Customer.BillingCity, Customer.BillingState, Customer.BillingZip, [Order].PickupDate, [Order].OrderNumber, [Order].OrderTotal, [Order].ProNumber, [Order].PickupCompany, [Order].PickupCity, [Order].PickUpState, [Order].Dcompany, [Order].Dcity, [Order].Dstate, CONVERT(varchar(5), DeliverInTime, 114) AS DelInTime, [Order].PiecesWeight1, [Order].BaseRATE, [Order].POD, [Order].Requester, [Order].Po1, [Order].Po2, AccessorialCharge.Description, OrderDriverExtraCharge.AccessorialChargeDesc, OrderDriverExtraCharge.AccessorialChargeAmount, [Order].NormalDiscount, - 1 * [Order].DISCAmount AS DISCAmount FROM (((Invoice INNER JOIN [Order] ON Invoice.InvoiceId = [Order].InvoiceId) INNER JOIN Customer ON Invoice.CustID = Customer.CustID) LEFT JOIN OrderDriverExtraCharge ON [Order].OrderNumberId = OrderDriverExtraCharge.OrderNumberId) LEFT JOIN AccessorialCharge ON OrderDriverExtraCharge.AccessorialChargeId = AccessorialCharge.AccessorialChargeId where Invoice.InvoiceId = '1117782' |
如果我将
我尝试过:
1 2 3 4 5 6 7 | from I in db.Invoices join O in db.Orders on I.InvoiceId equals O.InvoiceId join C in db.Customers on I.CustId equals C.CustId join OD in db.OrderDriverExtraCharges on O.OrderNumberId equals OD.OrderNumberId join AC in db.AccessorialCharges on OD.AccessorialChargeId equals AC.AccessorialChargeId where I.InvoiceId == invoice.InvoiceId select new PrintInvoiceViewModel() |
但它没有显示所需的结果。请帮帮我,如果你的回答对我有用的话,我会记下来的。谢谢您。
您可以这样做:
1 2 3 4 5 6 7 8 9 | from I in db.Invoices join O in db.Orders on I.InvoiceId equals O.InvoiceId join C in db.Customers on I.CustId equals C.CustId from OD in db.OrderDriverExtraCharges .Where(w=>w.OrderNumberId==O.OrderNumberId).DefaultIfEmpty() from AC in db.AccessorialCharges .Where(w=>w.AccessorialChargeId==OD.AccessorialChargeId).DefaultIfEmpty() where I.InvoiceId == invoice.InvoiceId select new PrintInvoiceViewModel() |
您应该使用
1 2 3 4 5 6 7 8 9 | from I in db.Invoices join O in db.Orders on I.InvoiceId equals O.InvoiceId join C in db.Customers on I.CustId equals C.CustId join OD in db.OrderDriverExtraCharges on O.OrderNumberId equals OD.OrderNumberId into ODs from OD in ODs.DefaultIfEmpty() join AC in db.AccessorialCharges on OD.AccessorialChargeId equals AC.AccessorialChargeId into ACs from AS in ACs.DefaultIfEmpty() where I.InvoiceId == invoice.InvoiceId select new PrintInvoiceViewModel() |