OrderBy según la lista de campos y las reglas de Asc / Desc

Tengo lo siguienteList conOrderBy parámetros:

List<String> fields = new List<String> { "+created", "-approved", "+author" }

Esto daría como resultado la siguiente consulta de Linq:

IQueryable<Post> posts = _context.posts.AsQueryable();

posts = posts
   .OrderBy(x => x.Created)
   .ThenByDescending(x => x.Approved);
   .ThenBy(x => x.Author.Name);

Básicamente, las reglas son:

Use el primer elemento en elOrderBy y los otros enThenBy.Use descendente cuando el campo comienza con- y ascendente cuando con+.

Mi idea sería tener algo como:

OrderExpression expression = posts
  .Add(x => x.Created, "created")
  .Add(x => x.Approved, "approved")
  .Add(x => x.Author.Name, "author");

Entonces, la expresión asocia las propiedades de publicación / propiedades secundarias a cada clave en los campos. Luego se aplicaría de la siguiente manera:

posts = posts.OrderBy(expression, fields);

Entonces elOrderBy la extensión pasaría por cada elemento en OrderExpression y aplicaría las reglas (1) y (2) para generar la consulta:

posts = posts
   .OrderBy(x => x.Created)
   .ThenByDescending(x => x.Approved);
   .ThenBy(x => x.Author.Name);

¿Cómo se puede hacer esto?

Respuestas a la pregunta(3)

Su respuesta a la pregunta