Wie kann ich die OrderBy-mit einem dynamischen string-parameter?
Ich dies tun möchten:
var orderBy = "Nome, Cognome desc";
var timb = time.Timbratures.Include("Anagrafica_Dipendente")
.Where(p => p.CodDipendente == 1);
if(orderBy != "")
timb = timb.OrderBy(orderBy);
Gibt es eine OrderBy
überlastung zur Verfügung, die akzeptiert einen string-parameter?
Möglich, Duplikat der Wie kann ich festlegen, das Linq-OrderBy-argument dynamisch?
Hier ist eine gute Antwort. Ohne Dritte Bibliotheken. stackoverflow.com/a/233505/714828
für entity framework, finden Sie unter dieser Antwort (mit
Hier ist eine gute Antwort. Ohne Dritte Bibliotheken. stackoverflow.com/a/233505/714828
für entity framework, finden Sie unter dieser Antwort (mit
EF.property<object>
)InformationsquelleAutor Luca Romagnoli | 2010-04-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Absolut. Sie können die LINQ Dynamic Query Library, gefunden auf Scott Guthrie ' s blog. Es gibt auch eine aktualisierte version zur Verfügung auf CodePlex.
Es ermöglicht Ihnen das erstellen
OrderBy
KlauselnWhere
- Klauseln, und so ziemlich alles andere, durch die übergabe von string-Parametern. Es funktioniert großartig für die Erstellung von generischen code für die Sortierung/Filterung Gitter, etc.OrderBy
Feld? e.g.OrderBy("UserInput ascending").
Dies ist als ein Nuget-Paket für Interessierte
Sie sollten immer überprüfen die Benutzereingaben hier. Es ist trivial.
InformationsquelleAutor Mike Mooney
Wenn Sie mit einfachen LINQ-to-objects und nicht wollen, um eine Abhängigkeit einer externen Bibliothek es ist nicht schwer zu erreichen, was Sie wollen.
Den
OrderBy()
Klausel akzeptiert eineFunc<TSource, TKey>
bekommt eine Art Schlüssel aus einem source-element. Sie können die Definition der Funktion außerhalb derOrderBy()
Klausel:Können Sie dann zuordnen, um verschiedene Werte je nach der Art der Kriterien:
Dann können Sie Sortieren:
Diesem Beispiel wird davon ausgegangen, dass der Typ der Quelle ist
Item
Eigenschaften, dieName
undRank
.Beachten Sie, dass in diesem Beispiel
TKey
istObject
nicht beschränken die Arten von Immobilien, die sortiert werden können. Wenn die func-gibt einen Wert zurück geben (wieInt32
) es wird geboxt, beim Sortieren und das ist etwas ineffizient. Wenn Sie können, beschränkenTKey
auf einen bestimmten Wert geben, können Sie dieses problem umgehen.Wenn ich die erste dynamische Ordnung zu sein, absteigend, und die zweite aufsteigen - gibt es da einen trick für?
Wenn eine der Eigenschaften numerisch ist (dies umfasst
DateTime.Ticks
) kannst du den Wert, um eine Sortierung in umgekehrter Reihenfolge. Ansonsten können SieOrderBy
oderOrderByDescending
bedingt:var sortedItems = reverse ? items.OrderByDescending(orderByFunc) : items.OrderBy(orderByFunc)
.für jede Eigenschaft, die ich hinzufügen müssen, um eine if-Bedingung?
InformationsquelleAutor Martin Liversage
Anderen Lösung aus codeConcussion (https://stackoverflow.com/a/7265394/2793768)
LINQ to Entities does not recognize the method 'System.Object GetValue(System.Object, System.Object[])' method, and this method cannot be translated into a store expression.
mit diesem Fehler könnte u versuchen: var orderByAddress = Elemente.AsEnumerable().OrderBy(x => propertyInfo.GetValue(x, null))
Nicht eine gute Sache, wenn er will, um den Seitenumbruch der Ergebnisse. Eine solche Paginierung kommen würde, nachdem die OrderBy-mit Skip() und Take()...
InformationsquelleAutor Chinh Phan
Die Sie nicht brauchen, um eine externe Bibliothek. Der folgende code funktioniert für LINQ to SQL/entities.
(
CreateExpression
kopiert von https://stackoverflow.com/a/16208620/111438)InformationsquelleAutor niaher
Einfachsten & die beste Lösung:
fügen Sie mithilfe von System.Linq;
Dies wird wahrscheinlich nicht funktionieren mit
IQueryable
.InformationsquelleAutor Kasper Roma
Blick auf dieses blog hier. Es beschreibt einen Weg, dies zu tun, definieren Sie eine
EntitySorter<T>
.Es erlaubt, Sie zu übergeben in einem
IEntitySorter<T>
in Ihre service-Methoden und verwenden Sie es wie diese:Und Sie können erstellen eine
EntitiySorter
wie diese:Oder so:
InformationsquelleAutor Steven
Habe ich so:
Verwenden :
Arbeiten wie:
Du hast Recht, wenn ich den code habe ich es nur für Streicher. Ich bearbeitet habe, zu arbeiten, mit anderen Typen zu.
Wie können Sie die Methode funktioniert auch für andere Arten. Haben Sie ein Beispiel?
InformationsquelleAutor Gustavo Rossi Muller
Müssen Sie die Verwendung der LINQ - Dynamische Abfrage-Bibliothek, um die übergabe von Parametern zur Laufzeit,
Dies ermöglicht linq-Anweisungen wie
InformationsquelleAutor Nicholas Murray
In einer Antwort oben:
Einfachsten & die beste Lösung:
Es ist ein syntax-Fehler,
,null
muss Hinzugefügt werden:InformationsquelleAutor Jaume Planas