如何根据String Key获取Func <q,string =“”>的Key

时间:2017-05-13 05:49:00

标签: c# linq c#-4.0 func c#-6.0

我尝试编写一个通用方法来获取排序键来执行OrderBy操作,但我在以下代码中失败了。

public Func<Q, string> GetSortProperty<Q>(IQueryable<Q> data, string SortColumn) 
{
    if (!string.IsNullOrWhiteSpace(sortColumn))
    {
        Func<Q, string> sort = i => i.GetType().GetProperty(sortColumn).GetValue(i, null);

        return sort;
    }

    return null;
}

我审阅了以下Stack overflow问题

请帮助我。

1 个答案:

答案 0 :(得分:2)

基于GetValue声明:

public virtual object GetValue(object obj, object[] index);

您可以将方法类型从Func<Q, string>更改为Func<Q, object>

public Func<Q, object> GetSortProperty<Q>(IQueryable<Q> data, string SortColumn)
{
    if (!string.IsNullOrWhiteSpace(SortColumn))
    {
        Func<Q, object> sort = i => i.GetType().GetProperty(SortColumn).GetValue(i, null);
        return sort;
    }
    return null;
}

或将其投放到string

public Func<Q, string> GetSortProperty<Q>(IQueryable<Q> data, string SortColumn)
{
    if (!string.IsNullOrWhiteSpace(SortColumn))
    {
        Func<Q, string> sort = i => (string)i.GetType().GetProperty(SortColumn).GetValue(i, null);
        return sort;
    }
    return null;
}

此外,如果您使用的是C#6,我建议您更改此类似内容以阻止NullReferenceException

Func<Q, string> sort = i => (string)i.GetType().GetProperty(SortColumn)?.GetValue(i, null);