按字符串形式按属性对对象进行排序

时间:2013-12-10 18:07:48

标签: c# sorting

有什么方法可以让我的工作。不工作的部分是粗体。本质上,我试图找出一种方法来让它按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;
}

3 个答案:

答案 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;

}