Programmieren Sie OrderBy / ThenBy programmgesteuert mit LINQ / Entity Framework

8

Ich verfüge über eine Berichtsschnittstelle, über die der Endbenutzer mehrere Felder für die Sortierreihenfolge des zurückgegebenen Berichts auswählen kann. 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 etwa so:

%Vor%

(Hinweis: Ich habe den Schalter entfernt, um zu bestimmen, ob dies der Einfachheit halber das erste Sortierelement ist.)

Irgendwelche Gedanken darüber, wie man durch eine Sammlung iteriert, um die Sortierreihenfolge zu bestimmen?

    
acullen72 21.11.2012, 16:05
quelle

3 Antworten

15

Sie können tun, was Sie wollen, wenn Sie einen initialen "Seed" OrderBy:

verwenden

BEARBEITEN Sie müssen OrderBy aufrufen, um zuerst eine IOrderedEnumerable (oder IOrderedQueryable ) zu erstellen, bevor Sie ThenBy clauses:

anfügen %Vor%

Wenn Sie etwas flexibleres möchten, diese Antwort

    
D Stanley 21.11.2012, 16:20
quelle
1

Ich habe diese Erweiterungsmethoden erstellt, um ein identisches Problem zu lösen, wie es in der Frage angegeben ist:

%Vor%

Der Code in der Frage könnte dann umgestaltet werden zu:

%Vor%

REMARK Diese Erweiterungsmethoden überprüfen nur den vorherigen Ausdruck in der Ausdrucksbaumstruktur, um zu bestimmen, ob OrderBy oder ThenBy verwendet werden soll, keine anderen Ausdrücke dürfen dazwischen liegen. Wenn du das auch angehen willst, musst du durch die komplette Baumstruktur gehen, die nur den Overhead hinzufügt, den du nicht willst:)

    
Wouter Huysentruit 03.08.2017 13:42
quelle
-1

Kann alle in einem sein Linq Abfrage ist nicht die beste Option aus Sicht der Lesbarkeit. Ich würde IQueryable verwenden, um Ihre Abfrage im Speicher zu erstellen. Verwenden Sie eine ähnliche switch -Anweisung (aber mit IQueryable), und führen Sie dann am Ende .ToList (d. H. Enumerieren) aus, um die gewünschte Abfrage auf dem Server auszuführen.

    
daehaai 21.11.2012 16:10
quelle

Tags und Links