Per ordinare un elenco con Linq, è necessario chiamare OrderBy
per prima cosa chiamare ThenBy
sul risultato per gli ordini subordinati.elenco ordini in cui l'ordine di livello superiore è sconosciuto
Sono in una situazione in cui non conosco l'ordinamento di livello superiore prima mano. Ho una lista di ordini che dovrebbero essere applicati in modo condizionale.
Ti piace questa:
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);
Così la lista sarà sempre ordinate per Item1, e condizionatamente da Item2 e/o Item3 prima.
Come realizzare questo in C#? Anche le soluzioni senza Linq sono benvenute.
cosa c'è di sbagliato con quello che hai - basta scrivere 'var = orderedlist list.OrderBy (t => t.Item1);' e conserva tutto ** ma ** l'ultima riga – Carsten
'ThenBy' è disponibile solo su' IOrderedEnumerable', quindi è possibile utilizzare un controllo del tipo. Se 'IOrderedEnumerable' usa' ThenBy' else 'OrderBy' – Jehof
@Carsten Il problema è che Johan vuole che l''ordine1' ordina * l'ultimo *. Non è esattamente facile da leggere, ma è quello che ha scritto :) – Luaan