Ich habe eine Liste von Elementen, die auf eine ganz bestimmte Art und Weise sortiert werden müssen.Liste benutzerdefinierte Sortierung
Nehmen Sie dieses Beispiel:
public class PayStubDetailItem
{
public string Code { get; set; }
}
void Main()
{
var bonus = new PayStubDetailItem() { Code = "Bonus" };
var ot = new PayStubDetailItem() { Code = "OT"};
var reg = new PayStubDetailItem() { Code = "Reg"};
var otPrem = new PayStubDetailItem() { Code = "OTPrem"};
var tps = new PayStubDetailItem() { Code = "3ps"};
var list = new List<PayStubDetailItem> {
bonus, ot, reg, otPrem, tps
};
}
Meine Forderung besagt, dass die Sortierung sollte wie folgt lauten: Reg, OT, OTPrem, Alpha-Art von Code.
Erklärt in Worten, wenn Liste 'Reg' Code enthält, sollte es zuerst kommen, wenn es auch 'OT' enthält, sollte es nach Reg, usw. kommen. Alle Artikel, die Codes von diesen spezifischen drei abweichen, sollten alphabetisch sortiert sein . Reg, OT, OTPrem, 3ps, Bonus
Was der eleganteste Weg wäre, um das zu erreichen:
In meinem Beispiel die sortierte Liste soll wie folgt aussehen? Vielleicht mit LINQ oder einem benutzerdefinierten Vergleich.
Das ist, was ich bisher versucht habe, aber es ist zu weitschweifig:
var subList = list.Where(i => i.Code != "OT" && i.Code != "Reg" && i.Code != "OTPrem");
subList = subList.OrderBy(l => l.Code);
var newList = new List<PayStubDetailItem>();
if (list.Select(c => c.Code).Contains("Reg"))
{
newList.Add(list.Where(i => i.Code == "Reg").FirstOrDefault());
}
if (list.Select(c => c.Code).Contains("OT"))
{
newList.Add(list.Where(i => i.Code == "OT").FirstOrDefault());
}
if (list.Select(c => c.Code).Contains("OTPrem"))
{
newList.Add(list.Where(i => i.Code == "OTPrem").FirstOrDefault());
}
newList.AddRange(subList);
newList.Dump();
Dank
LINQ scheint gut zu sein. Hast du es versucht? –
@DavidL Ich habe meine Post mit meinem aktuellen Versuch aktualisiert, aber ich mag es nicht. Es ist hässlich –