Wie kann ich festlegen, das Linq-OrderBy-argument dynamisch?
Wie kann ich das argument übergeben orderby
mit einem Wert nehme ich als parameter?
Ex:
List<Student> existingStudends = new List<Student>{ new Student {...}, new Student {...}}
Aktuell Umsetzung:
List<Student> orderbyAddress = existingStudends.OrderBy(c => c.Address).ToList();
Statt c.Address
, wie kann ich das als ein parameter?
Beispiel
string param = "City";
List<Student> orderbyAddress = existingStudends.OrderByDescending(c => param).ToList();
Sie könnten auf der Suche nach Dynamischen Linq: weblogs.asp.net/scottgu/archive/2008/01/07/...
Versucht zu klären, die Frage ein bisschen. Auch
Mögliche Duplikate von Dynamic LINQ OrderBy auf IEnumerable<T>
Versucht zu klären, die Frage ein bisschen. Auch
OrderBy
ist eine Linq-Funktion, und ist auf IEnumerable
, nicht eine spezielle Funktion für die List
. Fühlen Sie sich frei, zu Rollen, zu Bearbeiten oder zu ändern, es weiter 🙂Mögliche Duplikate von Dynamic LINQ OrderBy auf IEnumerable<T>
InformationsquelleAutor Sreedhar | 2011-09-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine Möglichkeit mit der spiegelung...
verwenden Sie die
ThenBy
- Methode.Wenn ich versuche, diese bekomme ich die Fehlermeldung: LINQ to Entities nicht erkennt die Methode 'System.Object GetValue(System.Object, System.Object [])' - Methode, und diese Methode kann nicht übersetzt werden, in einen laden zu Ausdruck. Macht diese Antwort nur für Linq To SQL?
Kein Fehler mit .AsEnumerable(): var orderByAddress = Elemente.AsEnumerable().OrderBy(x => propertyInfo.GetValue(x, null));
Wie kann ich dynamisch entscheiden, order by, asc oder desc
InformationsquelleAutor codeConcussion
Können Sie ein wenig Reflexion zu konstruieren, Ausdruck Baum wie folgt (dies ist eine Erweiterung Methode):
orderByProperty
ist der name der Eigenschaft, die Sie bestellen möchten, indem Sie und wenn true übergeben als parameter fürdesc
, wird in absteigender Reihenfolge sortiert werden; andernfalls erfolgt die Sortierung in aufsteigender Reihenfolge.Nun sollten Sie in der Lage sein zu tun
existingStudents.OrderBy("City",true);
oderexistingStudents.OrderBy("City",false);
Ich würde bis-Abstimmung diese zehn mal, wenn ich könnte!!! Wo Sie lernen, zu schreiben-Erweiterung Methode so????!!
Beste Antwort 4ever
Sollte diese Rückkehr ein IOrderedQueryable, genauso wie die built-in OrderBy? So könnte man nennen .ThenBy.
Ist es voodoo, die Hinzugefügt werden können, um diese um diese Arbeit zu machen für eine Eigenschaft aus einer Klasse, die die entity erbt? Normalerweise habe ich eine Klasse, die alle meine db-Klassen Erben, einfache Sachen wie
createddate
etc. und leider funktioniert das nicht, wenn die Sortierung-Zeichenfolge/ - Eigenschaft der Basisklasse.InformationsquelleAutor Icarus
1) Installieren System.Linq -.Dynamische
2) Fügen Sie den folgenden code
3) Schreiben Sie Ihre Schalter für die Auswahl der Lambda-Funktion
4) Verwenden Sie Ihre Helfer
5) Sie können es verwenden, mit pagging (PagedList)
Erklärung
System.Linq -.Dynamische können die Zeichenfolge in der OrderBy-Methode. Aber innerhalb dieser Nachfrist kann der string wird geparst, um die Lambda. Also dachte ich, es würde funktionieren, wenn wir analysieren die Lambda-Zeichenfolge und geben Sie es an die OrderBy-Methode. Und es funktioniert!
InformationsquelleAutor Igor Valikovsky
Genial! Genau das, was ich brauchte.
InformationsquelleAutor user3440420
Hier ist etwas, was ich kam mit, für den Umgang mit einer bedingten Absteigend. Sie könnte kombinieren diese mit anderen Methoden zu generieren, die
keySelector
func dynamisch.Verwendung:
Bemerken dies ermöglicht Ihnen, Kette diese
.OrderBy
Erweiterung mit einem neuen parameter auf alle IQueryable.InformationsquelleAutor AaronLS
Erweitern die Antwort von @Ikarus: wenn Sie möchten, dass der Rückgabetyp der Methode ein IOrderedQueryable statt ein IQueryable, können Sie einfach werfen das Ergebnis wie folgt:
InformationsquelleAutor Ciaran
Diese können nicht passieren Sie eine
string
, als Sie fragte, für Ihre Frage, aber es könnte noch für Sie arbeiten.Den
OrderByDescending
Methode nimmt einenFunc<TSource, TKey>
, so können Sie schreiben Sie Ihre Funktion so:Gibt es andere überladungen für
OrderByDescending
wie gut, dass nehmen Sie einenExpression<Func<TSource, TKey>>
, und/oder eineIComparer<TKey>
. Sie konnten auch einen Blick in diese und sehen, ob Sie Ihnen etwas von nutzen.besser?
Das war genau das, was für mich gearbeitet! Ich wollte eine Funktion, die würde, um eine Liste aufsteigend oder absteigend, je nach übergebene bool-Wert. Dein code hat Super geklappt mit ein wenig Feintuning!
LINQ in Action: IEnumerable<Book> CustomSort<TKey - >(Func<Buch, TKey> Selektor, Boolean ascending) { IEnumerable<Book> Bücher = SampleData.Bücher; return aufsteigend ? Bücher.OrderBy(Auswahl) : Bücher.OrderByDescending(selector); }
InformationsquelleAutor Merlyn Morgan-Graham
Die einzige Lösung, die für mich gearbeitet wurde hier gepostet https://gist.github.com/neoGeneva/1878868 von neoGeneva.
Werde ich re-post seinen code, weil es gut funktioniert und ich würde nicht wollen, es zu sein, verloren in den interwebs!
InformationsquelleAutor user1477388
Ich bin spät zur party, aber keine dieser Lösungen bei mir funktioniert. Ich war begierig zu versuchen System.Linq -.Dynamische, aber ich konnte nicht finden, Sie auf Nuget, vielleicht abgeschrieben? So oder so...
Hier eine Lösungen, die ich kam mit. Ich brauchte, um dynamisch die Verwendung einer Mischung von OrderBy, OrderByDescending und OrderBy > ThenBy.
Ich einfach erstellte eine Erweiterung Methode für meine Liste-Objekt, ein bisschen hacky, ich weiß... würde ich nicht empfehlen, wenn es etwas, das ich Tat, war eine Menge, aber es ist gut für einen one off.
InformationsquelleAutor Nicolay
Fügen Sie den nugget-Paket Dynamit code
Fügen Sie den namespace Dynamit.Erweiterungen
ZB : mit Dynamit.Erweiterungen;
Geben, Um durch die Abfrage wie eine beliebige SQL-Abfrage
Z.B. : Studenten.OrderBy(" City DESC", "Adresse").ToList();
InformationsquelleAutor Sreeja S J