我尝试编写一个通用方法来获取排序键来执行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问题
请帮助我。
答案 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);