Sie haben dies in Ihrer Abfrage, und ich gehe davon aus es ist ein Tippfehler: a.RECID = x.CUSTPACKINGSLIPJOUR
weil CUSTPACKINGSLIPJOUR
der Name Sammlung ist. Daher habe ich stattdessen SomeId
verwendet. Aber das sollte Ihnen die Idee geben:
Machen Sie eine Unterabfrage innerhalb der Projektion. Sie müssen auch bestellen, indem Sie absteigen und dann den ersten Datensatz nehmen - das wird wie top 1
sein. Hier ist die Abfrage:
var query = from a in CUSTPACKINGSLIPJOUR
join c in CUSTPACKINGSLIPTRANS on a.PACKINGSLIPID equals c.PACKINGSLIPID
select new
{
VerID = (from x in CUSTPACKINGSLIPVERSION
where a.RECID == x.SomeId select x)
.OrderByDescending(o => o.VERSIONDATETIME)
.First().INTERNALPACKINGSLIPID,
c.LINENUM,
c.RECID
};
Sie es mit den folgenden Sammlungen testen:
var CUSTPACKINGSLIPJOUR = new List<CUSTPACKINGSLIPJOUR> { new CUSTPACKINGSLIPJOUR { PACKINGSLIPID = 1, RECID = 1 },
new CUSTPACKINGSLIPJOUR { PACKINGSLIPID = 2, RECID = 2 }};
var CUSTPACKINGSLIPTRANS = new List<CUSTPACKINGSLIPTRANS>
{
new CUSTPACKINGSLIPTRANS { LINENUM = 1, RECID = 1, PACKINGSLIPID = 1 }
};
var CUSTPACKINGSLIPVERSION = new List<CUSTPACKINGSLIPVERSION>
{
new CUSTPACKINGSLIPVERSION { INTERNALPACKINGSLIPID = 1, SomeId = 1, VERSIONDATETIME = DateTime.Today.AddDays(-1) },
new CUSTPACKINGSLIPVERSION { INTERNALPACKINGSLIPID = 2, SomeId = 1, VERSIONDATETIME = DateTime.Today }
};
Es wird die gleiche Abfrage, wenn Sie eine DbSet<T>
verwenden.
Ich weiß nicht, ob ich Ihre Frage falsch interpretiert hatte: es gibt erste Aufzeichnung von 'lineum' &' recid', aber das OP hat '*' in 'SELECT', was bedeutet, dass er alle' CUSTPACKINGSLIPJOUR' Spalten auswählen möchte, dann alle 'LINENUM' +' RECID' zurückgibt und nur einen einzelnen Datensatz von 'zurückgibt INTERNALPACKINGSLIPID'. –
Ich kann nicht sagen, was * in diesem Fall bedeutet. Es könnte eine Eigenschaft oder 100 Eigenschaften sein. Das Original hat immer wieder 1 ausgewählt und ich kann nicht sagen, ob das eine Zeile oder viele Zeilen sind. Ich habe das Beste gemacht, was ich konnte mit der Menge an Informationen gepostet. – jdweng
Ich habe den Code so geändert, dass er nach Datum gruppiert ist, sodass Sie alle Zeilen für das letzte Datum erhalten. – jdweng