有什么方法可以让我的工作。不工作的部分是粗体。本质上,我试图找出一种方法来让它按sortColumn排序,sortColumn作为字符串传递。它想要o => o.Field not o.String。
internal List<Apps> GetAllApps(string sortColumn)
{
List<Apps> employeeList = new List<Apps>();
// Some database operations that fill employeeList
// with a bunch of objects from a database operations
if (!string.IsNullOrEmpty(sortColumn))
{
employeeList.OrderBy(o => **o.sortColumn** ).ToList();
}
return employeeList;
}
答案 0 :(得分:4)
您可以尝试这样的事情:
var sortPropertyInfo = typeof(Apps).GetProperty(sortColumn);
employeeList
.OrderBy(o => sortPropertyInfo.GetValue(o, null))
.ToList();
可以添加一些健全性检查。或者,请考虑使用Dynamic LINQ。
答案 1 :(得分:0)
您可以使用反射
employeeList.OrderBy(o => typeof(Apps).GetMethod(sortColumn).Invoke(o, null) ).ToList();
答案 2 :(得分:0)
我更喜欢使用Dynamic LINQ:
internal List<Apps> GetAllApps(string sortColumn)
{
List<Apps> employeeList = new List<Apps>();
...
if (!string.IsNullOrEmpty(sortColumn))
{
employeeList = employeeList.AsQueryable<Apps>()
.OrderBy(sortColumn)
.Cast<Apps>()
.ToList();
}
return employeeList;
}