Es scheint, dass Sie nicht versuchen, Ihre Sequenz von dispoLinien aufsteigend von Beginn der Fahrt zu bestellen, aber in aufsteigender Reihenfolge von Beginn Fahrt Sequenzen. Sie haben den Vergleich zwischen zwei Beginn-Fahrt-Sequenzen nicht definiert.
Um dies zu demonstrieren, habe ich Ihre schwierige OrderBy-Anweisung in kleine Schritte aufgeteilt, wobei ich den Typ jedes Teils dieser OrderBy überprüfe. Lassen Sie uns dies für das erste Element Ihrer dispoLinien tun:
var dl = dispoLinien.First(); var linienVersion = dl.Linie.GetValidLinienVersionByDate (Datum);
Sie haben den Typ der linienVersion nicht angegeben, aber die zurückgegebene linienVersion hat eine Eigenschaft Fahrenen eines Typs, die IEnumerable implementiert. Mit anderen Worten: Von einem dl und einem Datum kann man eine linienVersion als eine Folge von Fahrts bekommen.
IEnumerable<Fahrt> fahrten = linienVersion.Fahrten.
var fahrtBeginns = fahrten
.Select(fahrt => fahrt.Beginn);
Also aus jedem dl extrahieren Sie eine Sammlung von Beginns of Fahrts.
Das Ergebnis ist, dass Sie Ihre Sammlung in aufsteigender Reihenfolge einer Sammlung von Beginns of Fahrs bestellen möchten.
Ich bin mir ziemlich sicher, dass dies nicht das ist, was Sie wollen. Wenn Sie Ihre dispLinien in aufsteigender Reihenfolge von Beginn Fahrts bestellen, sollten Sie für jeden dl die früheste aller Fahrts erhalten:
var orderedDispoLinien = dispoLinien.OrderBy(dispoLinie =>
dispoLinie.Linie.GetValidLinienVersionByDate(date)
.Fahrten // get only Fahrten
.Where(fahrt => fahrt.Any() // that are not empty
.Select(fahrt => fahrt.Beginn) // from each fahrt take Beginn
.Min(beginn => beginn)); // and use the earliest Beginn Fahrt
Jetzt haben Sie Ihre dispoLinien aufsteigend von kleinsten Beginn Fahrt sortiert, was bedeutet, dass die Dispolinee mit der frühesten Abfahrt ist das erste.
GroupBy legt die Reihenfolge der Gruppen im Ergebnis nicht fest, daher ist es für OrderBy vor der Gruppierung nicht sinnvoll. Wenn Sie ein geordnetes Ergebnis wünschen, sollten Sie OrderBy nach der GroupBy
Ich denke, dass Sie eine schließende Klammer zu einem bestimmten Zeitpunkt fehlt. Sie bestellen gerade mit einer Linq-Abfrage (Select usw.). – Kilazur
Ich habe die Klammer mit hoher Beleuchtung nachgeschlagen und sie sind an der richtigen Stelle. Zuerst führe ich einen Lambda-Ausdruck aus, wähle dann eine Liste und verwende eine Funktion, die im Typ der Liste definiert ist. Die Funktion gibt die gültige Version für diese Liste zurück.Danach eine Liste in der Version auswählen und die Startzeiten auswählen, die bestellt werden sollen – venter