c# - 如何在 Entity Framework 查询中使用左连接?

标签 c# asp.net-mvc linq entity-framework

<分区>

我正在使用 Entity Framework 4.5。我必须将 SQL 查询转换为实体查询:

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' 

如果我将 OrderDriverExtraCharge.OrderNumberId) LEFT JOIN 更改为 OrderDriverExtraCharge.OrderNumberId) JOIN(简单连接)或内部连接,它不会显示正确的结果。

我试过这个:

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()

但它没有显示所需的结果。请帮助我,如果它对我有用,我会标记你的答案。谢谢。

最佳答案

你可以这样做:

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()

关于c# - 如何在 Entity Framework 查询中使用左连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21748425/

相关文章:

c# - 有条件的 Linq 外连接

c# - SetActive 在 Unity3d 中不起作用?

C# - 从 WebRequest 获取响应并处理状态代码

android - MVC网站调用WCF比较好或者MVC直接调用数据库操作比较好

c# - 有没有办法可以延迟LINQ语句中的.Where子句?

.net - IEnumerable 为空?

c# - 在 Entity Framework 中使用 .include 创建巨大的查询?

c# - 如何从 Asp.Net MVC 5 依赖解析器获取 Structuremap IContainer 实例

asp.net-mvc - ASP.net MVC : Identity and drop auth cookie

asp.net-mvc - 路径 '/Home' 的 Controller 未找到或未实现 IController