それはあなたがFahrtのBeginnの昇順でdispoLinienのあなたの順序を注文しようとしますが、Beginn Fahrtシーケンスの昇順ではありませんようです。 2つのBegin Fahrt Sequence間の比較は定義していません。
難しいOrderByステートメントを小さなステップに分割して、このOrderByの各部分のタイプをチェックしました。 あなたのdispoLinienの最初の要素に対してこれを行いましょう:
var dl = dispoLinien.First(); var linienVersion = dl.Linie.GetValidLinienVersionByDate(date);
linienVersionのタイプは教えていませんが、返されるlinienVersionには、IEnumerableを実装するタイプのプロパティFahrtenがあります。言い換えれば:dlと日付から、あなたはFahrtsのシーケンスとしてlinienVersionを得ることができます。
IEnumerable<Fahrt> fahrten = linienVersion.Fahrten.
var fahrtBeginns = fahrten
.Select(fahrt => fahrt.Beginn);
各dlから、ファールツの始まりのコレクションを抽出します。
結果は、ファーリッツの始まりのコレクションの昇順でコレクションを注文したいということです。
私はこれがあなたが望むものではないと確信しています。あなたがBeginn Fahrtsの昇順であなたのdispLinienを注文したい場合は、すべてのDLのために、すべてのFahrtsの早いを取得する必要があります:
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
今、あなたがいることを意味し、最小のBeginn Fahrtの昇順であなたのdispoLinienをソートしています最も早いAbfahrtを持つdispoLinieが最初です。
GroupByは結果のグループの順序を指定しないため、グループ化する前にOrderByに意味をなさない。順序付けされた結果が必要な場合は、OrderByをGroupByの後に配置する必要があります。
ある時点で閉じ括弧が欠けていると思います。今はLinqのクエリ(Selectなど)で注文しています。 – Kilazur
私は高い照明でカッコを見ており、正しい場所にあります。最初にラムダ式を実行してリストを選択し、リストのタイプで定義されている関数を使用します。この関数は、このリストのvaildバージョンを返します。その後、バージョンでリストを選択し、注文する必要がある開始時刻を選択します – venter