Ejecuta la orden OrderBy con parámetro.
Estoy creando un endpoint para obtener algunos datos de mi base de datos. Estoy tratando de crear una funcionalidad de orden personalizado en mi front end para llamar a mi endpoint de la siguiente manera:
https://someapiurl/api/v1/controller/GetItems?ID=1&OrderBy=Name desc
Y este es el código que tengo en mi endpoint:
// Este es un ejemplo de cómo populé mi variable, lo cual funciona bien (tengo los elementos de la base de datos). List es un objeto Iqueryable
var list = dbContext.SomeEntity.FindAll…
// Código para obtener “Name” en lugar de “Name desc”
var param = orderByQueryString.Split(‘ ‘)[0];
if (orderByQueryString.Contains(“asc”))
return list.OrderBy(x => param);
else
return list.OrderByDescending(x => param);
Con ambos retornos, obtengo mi lista en orden ascendente. Pero si uso el siguiente código:
return list.OrderBy(x => x.Name);
O
return list.OrderByDescending(x => x.Name);
Ambos funcionan bien. Entonces mi pregunta es, ¿qué puedo hacer para tener el elemento de ordenamiento de forma dinámica en ese código, ya que a veces enviaré Name, a veces Id o CreatedDate, o algo así.
Por cierto, intenté con list.OrderBy(param); pero obtuve el mensaje de error “Los argumentos de tipo para el método ‘método’ no se pueden inferir a partir del uso”.
davy.ai
Para establecer dinámicamente el parámetro de ordenamiento en tu código, puedes usar el paquete System.Linq.Dynamic. Este paquete te permite utilizar cadenas para representar expresiones de ordenamiento que pueden generarse de forma dinámica. Así es cómo puedes modificar tu código para utilizar este paquete:
bash
PM> Install-Package System.Linq.Dynamic
csharp
using System.Linq.Dynamic;
Con esta modificación, puedes pasar cualquier nombre de columna y dirección de ordenamiento en el parámetro orderByQueryString, y el código generará y utilizará una expresión de ordenamiento de forma dinámica.