Ordenamiento dinámico con LINQ: ¿cómo aplicar OrderBy a IEnumerable/IQueryable por nombre de propiedad desde una cadena?
¡Hola a todos! Soy nuevo en C# y LINQ, y me he encontrado con una tarea que me tiene perplejo.
Tengo una colección de objetos `IEnumerable` (o `IQueryable`), y quiero ordenarla por diferentes campos según la elección del usuario. El usuario pasa el nombre del campo (por ejemplo, "Name" o "Date") y la dirección de ordenamiento ("asc" o "desc") como cadenas. ¿Cómo puedo aplicar dinámicamente `OrderBy` o `OrderByDescending` a la colección usando estas cadenas?
El problema es que `OrderBy` es un método genérico que requiere especificar la propiedad en tiempo de compilación mediante una expresión lambda (por ejemplo, `list.OrderBy(x => x.Name)`). No puedo simplemente escribir `list.OrderBy("Name")`.
Aquí hay un ejemplo de código que no funciona:
```csharp
public List SortPeople(IEnumerable people, string sortBy, bool ascending)
{
if (sortBy == "Name")
{
return ascending ? people.OrderBy(p => p.Name).ToList()
: people.OrderByDescending(p => p.Name).ToList();
}
}
```