OrderBy basierend auf der Liste der Felder und Asc / Desc-Regeln
Ich habe die folgendenList
mitOrderBy
parameter:
List<String> fields = new List<String> { "+created", "-approved", "+author" }
Dies würde zu folgender Linq-Abfrage führen:
IQueryable<Post> posts = _context.posts.AsQueryable();
posts = posts
.OrderBy(x => x.Created)
.ThenByDescending(x => x.Approved);
.ThenBy(x => x.Author.Name);
Also im Grunde sind die Regeln:
Verwenden Sie das erste Element imOrderBy
und die anderen inThenBy
.Verwenden Sie absteigend, wenn das Feld mit @ beginn-
und aufsteigend wenn mit+
.Meine Idee wäre, etwas zu haben wie:
OrderExpression expression = posts
.Add(x => x.Created, "created")
.Add(x => x.Approved, "approved")
.Add(x => x.Author.Name, "author");
So ordnet der Ausdruck jedem Schlüssel in Feldern die Eigenschaften post / child zu. Dann würde es wie folgt angewendet werden:
posts = posts.OrderBy(expression, fields);
So dasOrderBy
ie @ -Erweiterung durchläuft jedes Element in OrderExpression und wendet die Regeln (1) und (2) an, um die Abfrage zu erstellen:
posts = posts
.OrderBy(x => x.Created)
.ThenByDescending(x => x.Approved);
.ThenBy(x => x.Author.Name);
Wie kann das gemacht werden?