我正在编写一个asp.net mvc应用程序,我得到一个显示在表格中的服务调用列表。当用户单击表头时,我想告诉我的控制器按该列对列表进行排序。
public ActionResult Index(int? page, string sortBy, string sortDirection)
{
int pageIndex = page == null ? 0 : (int)page - 1;
IServiceCallService scService = new ServiceCallService();
IPagedList<ServiceCall> serviceCalls = scService.GetOpenServiceCalls("").ToPagedList(pageIndex, 2);
return View("List", serviceCalls);
}
如何合并sortBy和sortDirection。我想我可以这样做:
IPagedList<ServiceCall> serviceCalls = sc.Service.GetOpenServiceCalls("").OrderBy(sortBy).ToPagedList(pageIndex, 2);
但这不起作用,因为我假设OrderBy想要像p =&gt;这样的lambda。 p.CreateDate但不知道如何做到这一点。
我知道我可以做到的但是他们很难看,而且我确信C#在这里有一些简单的东西,我只是缺席了。
感谢。
答案 0 :(得分:4)
不要忘记方便花花公子的DataBinder:
var serviceCalls = sc.Service.GetOpenServiceCalls("").OrderBy(call => DataBinder.Eval(call, sortBy));
return serviceCalls.ToPagedList(pageIndex, 2);
来自Msdn docs的DataBinder.Eval
使用反射来解析和评估 一个数据绑定表达式再次 对象在运行时。
答案 1 :(得分:0)
在对通用列表进行排序时,您可以提供比较排序与List<T>.Sort()
重载的方法:
public void Sort(
Comparison<T> comparison
)
Here是来自MSDN的示例。 Comparison<T>
比较是一个委托,它提供了在排序时比较对象的方法。
我可能错了,但我相信如果您的列表只包含相同类型且该类型实现IComparable
的项目,则可能没有必要委托。
答案 2 :(得分:0)
如果您只是想对列表进行排序,您还可以使用杠杆jQuery并使用类似Table Sorter的内容。这也是实时和所有的ajax-y。