OrderBy com base na lista de campos e regras de Asc / Desc

Eu tenho o seguinteList comOrderBy parâmetros:

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

Isso resultaria na seguinte consulta Linq:

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

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

Então, basicamente, as regras são:

Use o primeiro item noOrderBy e os outros emThenBy.Use decrescente quando o campo começar com- e ascendente quando com+.

Minha idéia seria ter algo como:

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

Portanto, a expressão associa as propriedades de postagem / propriedades filho a cada chave nos campos. Em seguida, seria aplicado da seguinte maneira:

posts = posts.OrderBy(expression, fields);

Então oOrderBy A extensão passaria por cada item na OrderExpression e aplicaria as regras (1) e (2) para criar a consulta:

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

Como isso pode ser feito?

questionAnswers(3)

yourAnswerToTheQuestion