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?