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?