Avatar ·

动态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(); } ```