我正在编写一个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


  使用反射来解析和评估
  数据绑定表达式再次
  对象在运行时。

09-26 11:54