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 dasOrderByie @ -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?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage