使用asc / dsc进行列过滤?复杂的。 MVC4

时间:2014-04-26 09:34:19

标签: c# linq entity-framework asp.net-mvc-4

我有一个包含数据的数据表。我想申请分拣。当我单击表格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:'System.Data.Entity.DbSet'不包含'OrderBy'的定义和最佳扩展方法   超载   “System.Linq.ParallelEnumerable.OrderBy(System.Linq.ParallelQuery,   System.Func)'有一些无效的参数

     

2)错误2 实例参数:无法从'System.Data.Entity.DbSet'转换为   'System.Linq.ParallelQuery'

剩下的一切都运转良好。只是排序问题现在。任何想法。!

此致

1 个答案:

答案 0 :(得分:1)

在你的Func中,你是说输入参数是LeadList类型(可能有问题),返回类型是字符串(这没关系)。 OrderBy需要一个具有Lead类型(不是列表)的输入参数的委托。

也许这可以解决您的问题?

编辑: 我建议您将代理编辑为以下内容:(重要的是指定代理的输入参数类型为 Lead (不是Leads列表或类似内容)

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 : "");