C# 当用户单击表格标题时,如何对列表进行排序?

C# 当用户单击表格标题时,如何对列表进行排序?,c#,asp.net,asp.net-mvc,sorting,C#,Asp.net,Asp.net Mvc,Sorting,我正在编写一个asp.NETMVC应用程序,我得到了一个服务调用列表,并显示在一个表中。当用户单击表格标题时,我想告诉我的控制器按该列对列表进行排序 public ActionResult Index(int? page, string sortBy, string sortDirection) { int pageIndex = page == null ? 0 : (int)page - 1; IServiceCallService scServic

我正在编写一个asp.NETMVC应用程序,我得到了一个服务调用列表,并显示在一个表中。当用户单击表格标题时,我想告诉我的控制器按该列对列表进行排序

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有一些简单的东西,我只是错过了


谢谢。

对常规列表进行排序时,您可以提供与列表重载进行排序比较的方法。排序:

是来自MSDN的示例。比较是一个委托,它提供排序时比较对象的方法


我可能错了,但我相信如果您的列表仅包含相同类型的项,并且该类型实现了IComparable,则可能不需要委托。

在对常规列表进行排序时,您可以提供与列表重载进行排序比较的方法。排序:

是来自MSDN的示例。比较是一个委托,它提供排序时比较对象的方法


我可能错了,但我相信,如果您的列表仅包含相同类型的项,并且该类型实现了IComparable,则可能不需要委托。

不要忘记方便的dandy DataBinder:

var serviceCalls = sc.Service.GetOpenServiceCalls("").OrderBy(call => DataBinder.Eval(call, sortBy));
return serviceCalls.ToPagedList(pageIndex, 2);
Msdn文档中的DataBinder.Eval

使用反射来解析和计算 数据绑定表达式又是一个 对象在运行时


不要忘记方便的dandy DataBinder:

var serviceCalls = sc.Service.GetOpenServiceCalls("").OrderBy(call => DataBinder.Eval(call, sortBy));
return serviceCalls.ToPagedList(pageIndex, 2);
Msdn文档中的DataBinder.Eval

使用反射来解析和计算 数据绑定表达式又是一个 对象在运行时


您还可以使用杠杆jQuery,并使用类似的东西,如果您只是想对列表进行排序的话。它还可以是实时的,并且完全是ajax-y。

您还可以使用杠杆jQuery,并使用类似的东西,如果您只是想对列表排序的话。它也将是实时的,并且完全是ajax-y