Ordenação dinâmica com LINQ: como aplicar OrderBy a IEnumerable/IQueryable pelo nome da propriedade a partir de uma string?
Olá a todos! Sou novo em C# e LINQ, e me deparei com uma tarefa que me deixa perplexo.
Tenho uma coleção de objetos `IEnumerable` (ou `IQueryable`) e quero ordená-la por diferentes campos dependendo da escolha do usuário. O usuário passa o nome do campo (por exemplo, "Name" ou "Date") e a direção da ordenação ("asc" ou "desc") como strings. Como posso aplicar dinamicamente `OrderBy` ou `OrderByDescending` à coleção usando essas strings?
O problema é que `OrderBy` é um método genérico que requer a especificação da propriedade em tempo de compilação através de uma expressão lambda (por exemplo, `list.OrderBy(x => x.Name)`). Não posso simplesmente escrever `list.OrderBy("Name")`.
Aqui está um exemplo de código que não 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();
}
}
```