OrderBy на основе списка полей и правил Asc / Desc

У меня есть следующееList сOrderBy параметры:

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

Это приведет к следующему запросу Linq:

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

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

Так что в основном правила таковы:

Используйте первый элемент вOrderBy а остальные вThenBy.Использовать по убыванию, когда поле начинается с- и по возрастанию, когда с+.

Моя идея будет иметь что-то вроде:

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

Таким образом, выражение связывает свойства post / child с каждым ключом в полях. Тогда это будет применяться следующим образом:

posts = posts.OrderBy(expression, fields);

ИтакOrderBy extension будет проходить через каждый элемент в OrderExpression и применять правила (1) и (2) для построения запроса:

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

Как это может быть сделано?

Ответы на вопрос(3)

Ваш ответ на вопрос