利用asc/dsc?进行柱过滤?复杂的一个.MVC4

本文关键字:复杂 一个 MVC4 过滤 asc dsc 利用 | 更新日期: 2023-09-27 18:00:10

我有一个包含数据的数据表。我想应用排序。当我点击一个表Header时,Header索引将到达控制器,我的方法如下。

public ActionResult AjaxHandler(JQueryDataTableParamModel param)
{
    var Lead_FullDetails = entityobj.Leads;
    IEnumerable<Lead> filteredLeads;
    filteredLeads = Lead_FullDetails;
    var isLeadNameSortable = Convert.ToBoolean(Request["bSortable_1"]);
    var isContactNameSortable = Convert.ToBoolean(Request["bSortable_2"]);
    var isCompanyNameSortable = Convert.ToBoolean(Request["bSortable_3"]);
    var isProductSortable = Convert.ToBoolean(Request["bSortable_4"]);
    var sortColumnIndex = Convert.ToInt32(Request["iSortCol_0"]);
    Func<LeadList, string> orderingFunction = (c => sortColumnIndex == 1 && isLeadNameSortable ? c.LeadName :
                                                  sortColumnIndex == 2 && isContactNameSortable ? c.ContactName :
                                                  sortColumnIndex == 3 && isCompanyNameSortable ? c.CompanyName :
                                                  sortColumnIndex == 4 && isProductSortable ? c.Product : "");
    var sortDirection = Request["sSortDir_0"]; // asc or desc 
    if (sortDirection == "asc")
    {
        filteredLeads = Lead_FullDetails.OrderBy(orderingFunction); //HERE I AM FACING ISSUE its saying no orderby function present : erros mentioned below .
    }
    else
    {
          filteredLeads = Lead_FullDetails.OrderByDescending(orderingFunction);
    }
    var DisplayedLeads = filteredLeads.Skip(param.iDisplayStart).Take(param.iDisplayLength);
    var result = from c in DisplayedLeads select new object[] { Convert.ToString(c.LeadId), c.LeadName, c.ContactName, c.CompanyName,c.Product };

我的错误:

1)错误1:'系统。数据实体DbSet"不包含"OrderBy"的定义和最佳扩展方法过载’系统。林克。ParallelEnumerable。OrderBy(System.Linq.PalallelQuery,系统Func)'有一些无效的参数

2)错误2实例参数:无法从"System"转换。数据实体DbSet"到’系统。林克。ParallelQuery’

剩下的一切都很好。只是排序问题。任何想法。!

问候

利用asc/dsc?进行柱过滤?复杂的一个.MVC4

在您的Func中,您说输入parameter的类型是LeadList(可能有问题),返回类型是字符串(这是可以的)。OrderBy需要一个具有类型为Lead(非列表)的输入参数的委托。

也许这能解决你的问题?

编辑:我建议您将您的委托编辑为这样的内容:(重要的是要指定委托的输入参数为Lead类型(而不是Lead列表或类似的内容)

Func<Lead, string> orderingFunction = (c => sortColumnIndex == 1 && isLeadNameSortable ? c.LeadName :
                                              sortColumnIndex == 2 && isContactNameSortable ? c.ContactName :
                                              sortColumnIndex == 3 && isCompanyNameSortable ? c.CompanyName :
                                              sortColumnIndex == 4 && isProductSortable ? c.Product : "");