实体框架创建仅拉入最后一条记录的左外部联接

时间:2020-01-16 13:37:41

标签: mysql entity-framework left-join

我搜索了自己的特定问题,发现了几个很接近的问题,但是经过大量的实验,没有一个问题有所帮助。

给出以下代码:

var results = context.Shipments.AsNoTracking().Where(x => customerIds.Contains(x.CustomerId.Value) && x.ProcessStageFlag == ProcessStage.Complete)
  .GroupJoin(context.Audit.AsNoTracking().Where(x => x.Action != null), 
    sh => new { im.Shipments.TrackingNumber, im.Shipments.InvoiceNumber },
    au => new { rn.TrackingNumber, rn.InvoiceNumber },
    (sh, au) => new { Shipments = sh.Shipments, Audit = au })
  .SelectMany(x => x.Audit.DefaultIfEmpty(),
    (x, y) => new { Shipments = x.Shipments, Audit = y })
.Select(...)
.ToList()
.GroupBy(x => new {x.TrackingNumber, x.InvoiceNumber})
.Select(z => z.FirstOrDefault())
.ToList();

我似乎无法获得最后的记录是我从审计中获得的记录。

我尝试将.OrderByDescending(x => x.LastUpdatedOn).GroupJoin都添加到.SelectMany中,而没有任何影响。

这是我要在LINQ中重现的查询:

SELECT ship.Invoice_Number, au.Notes, au2.date_added FROM shipments ship LEFT OUTER JOIN audit au ON ship.Invoice_Number = au.invoice_number AND au.is_manual_note = 1 LEFT OUTER JOIN audit au2 ON ship.Invoice_Number = au2.invoice_number AND ra2.notes = 'Auto Created' AND au2.date_added = (SELECT MAX(date_added) FROM audit WHERE Invoice_Number = ship.invoice_number AND notes = 'Auto Created')

审计表必须连接两次,一次是拉入手动输入的注释,一次是确定何时创建审计。由于装运可以多次移入和移出审核,因此必须添加date_add查询。

萨姆

0 个答案:

没有答案