我正在编写一个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 => p.CreateDate这样的lambda,但不确定如何做到这一点。
我知道我可以做到的方式,但是它们很丑陋,我相信C#在这里有些简单的东西,我只是想念而已。
谢谢。
最佳答案
不要忘记方便的DataBinder:
var serviceCalls = sc.Service.GetOpenServiceCalls("").OrderBy(call => DataBinder.Eval(call, sortBy));
return serviceCalls.ToPagedList(pageIndex, 2);
Msdn文档中的DataBinder.Eval
使用反射来解析和评估
数据绑定表达式再次
对象在运行时。