我搜索了自己的特定问题,发现了几个很接近的问题,但是经过大量的实验,没有一个问题有所帮助。
给出以下代码:
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查询。
萨姆