Ich habe eine Reporting-Schnittstelle, wo der Endbenutzer mehrere Felder für die Sortierreihenfolge des zurückgegebenen Berichts auswählen. Das Problem, das ich habe, ist, dass ich die OrderBy/ThenBy-Methoden nicht wirklich verketten kann, da ich eine Liste von Sortierfeldern durchlaufe. Ich denke, so etwas wie dieses:Programmatisch Kette OrderBy/ThenBy mit LINQ/Entity Framework
foreach (string sort in data.SortParams)
{
switch (sort)
{
case "state":
query = query.ThenBy(l => l.RegionCode);
break;
case "type":
query = query.ThenBy(l => l.Type);
break;
case "color":
query = query.ThenBy(l => l.Color);
break;
case "category":
query = query.OrderBy(l => l.Category);
break;
}
}
(Anmerkung:. Ich den Schalter entfernt haben zu bestimmen, ob dies die erste Art Artikel willen der Einfachheit halber ist)
Irgendwelche Gedanken auf, wie durch eine Sammlung iterieren um die Sortierreihenfolge zu bestimmen?
Creative, muss jedoch prüfen, ob sich dies auf die Abfrageleistung auswirkt. Es könnte die Indexnutzung verhindern. – usr
Das funktionierte wie ein Zauber für mich. Zuerst hatte ich genau den gleichen Code wie oben, aber ich war gezwungen, eine Standardspalte für das erste 'OrderBy()' zu wählen - ich wusste nicht, dass ich stattdessen dort 0 setzen könnte. Die 0 führt dazu, dass die ultimative SQL-Abfrage mit einer zusätzlichen Spalte mit dem Wert 0 für jede Zeile ausgegeben wird. Anschließend wird nach dieser Zeile sortiert, um die Dummy-Sortierung zu erreichen. Anschließend werden alle Spalten in den verketteten 'ThenBy() 'übernommen 'dass du hinzugefügt hast. Vielen Dank! – BeemerGuy
Ich erhalte 'ArgumentOutOfRangeException' beim Aufruf von' OrderBy (l => 0) '. [Hier] (https://pastebin.com/raw/TZQ9g8Es) ist der 'StackTrace'. – Shimmy