Um eine Liste mit Linq zu bestellen, müssen wir OrderBy
zuerst aufrufen ThenBy
auf das Ergebnis für untergeordnete Ordnungen.Bestellliste, wo Top-Level-Reihenfolge unbekannt ist
Ich bin in einer Situation, in der ich nicht die Top-Level-Bestellung vor der Hand weiß. Ich habe eine Liste von Bestellungen, die unter bestimmten Bedingungen angewendet werden sollten.
So:
var list = new List<Tuple<int, string, DateTime>>();
list.Add(new Tuple<int, string, DateTime>(1, "B", new DateTime(2020, 1, 1)));
list.Add(new Tuple<int, string, DateTime>(2, "A", new DateTime(2000, 1, 1)));
list.Add(new Tuple<int, string, DateTime>(3, "C", new DateTime(1900, 1, 1)));
var orderedList = list;
if (sortByString)
{
orderdedList = orderedList.ThenBy(listItem => listItem.Item2);
}
if (sortByDateTime)
{
orderedList = orderedList.ThenBy(listItem => listItem.Item3);
}
orderList = orderedList.ThenBy(listItem => listItem.Item1);
So ist die Liste wird immer von element1 bestellt werden, und bedingt durch Element2 und/oder Item3 zuerst.
Wie erreichen Sie dies in C#? Lösungen ohne Linq sind ebenfalls willkommen.
eine Zustandsmaschine wie der Code zu verwenden, was mit falsch ist, was Sie haben - schreiben Sie einfach 'var orderedlist = list.OrderBy (t => t.Item1);' und behalte alles ** aber ** die letzte Zeile – Carsten
'ThenBy' ist nur auf' IOrderedEnumerable' verfügbar, also könntest du einen Typprüfung verwenden. Wenn 'IOrderedEnumerable'' ThenBy' verwenden sonst 'OrderBy' – Jehof
@Carsten Das Problem dabei ist, dass Johan das' Item1' bestellen will * zuletzt *. Es ist nicht gerade einfach zu lesen, aber das ist, was er geschrieben hat :) – Luaan