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);
Как это может быть сделано?