可能是重复问题:
动态LINQ排序
我有一个自定义排序选项列表,这些选项是从客户端网格控件(如果您好奇的话是KendoUI网格)传递到服务器的。这些排序选项具有按字符串排序的属性。我编写了一个 switch 方法,将检查排序对象的值并应用适当的LINQ。
private IQueryable<Report> SortReports(IQueryable<Report> reports, KendoSort sort)
{
switch (sort.Field)
{
case "name":
return sort.Dir == "asc" ? reports.OrderBy(x => x.Name) : reports.OrderByDescending(x => x.Name);
case "description":
return sort.Dir == "asc" ? reports.OrderBy(x => x.Description) : reports.OrderByDescending(x => x.Description);
default:
return sort.Dir == "asc" ? reports.OrderBy(x => x.Id) : reports.OrderByDescending(x => x.Id);
}
}
这个功能可以正常使用,但是看起来很丑。我该如何使用反射来做到这一点,以便我不必为我想要执行此操作的每种类型的实体编写自定义函数?如果我能有一个单独的函数,无论实体是什么,都可以执行此操作,那就太好了。