动态LINQ排序:如何根据字符串属性名对IEnumerable/IQueryable应用OrderBy?
大家好!我是C#和LINQ的新手,遇到了一个让我困惑的问题。
我有一个`IEnumerable`(或`IQueryable`)对象集合,想根据用户的选择按不同字段排序。用户以字符串形式传递字段名(例如"Name"或"Date")和排序方向("asc"或"desc")。如何动态地将`OrderBy`或`OrderByDescending`应用到集合上,使用这些字符串?
问题在于`OrderBy`是一个泛型方法,需要在编译时通过lambda表达式指定属性(例如`list.OrderBy(x => x.Name)`)。我不能直接写`list.OrderBy("Name")`。
以下是一个无法正常工作的代码示例:
```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();
}
```