C# DataTables多排序列.net mvc提示

C# DataTables多排序列.net mvc提示,c#,asp.net-mvc,datatables,C#,Asp.net Mvc,Datatables,我使用的是Datatables Jquery扩展,我对这些帖子进行了多重排序: 我的问题是,在本例中,这两种方法取决于我在控制器中使用的模型 例如,如果我需要在其他控制器中使用类似的代码,我需要复制该代码,并与其他控制器一起更改模型字段和类型 在我看来,这不是很干 如何进行?控制器是否适合这两种方法 private IOrderedQueryable<User> CreateSortedQuery(DataTableParameterModel parameterModel, IQu

我使用的是Datatables Jquery扩展,我对这些帖子进行了多重排序:

我的问题是,在本例中,这两种方法取决于我在控制器中使用的模型

例如,如果我需要在其他控制器中使用类似的代码,我需要复制该代码,并与其他控制器一起更改模型字段和类型

在我看来,这不是很干

如何进行?控制器是否适合这两种方法

private IOrderedQueryable<User> CreateSortedQuery(DataTableParameterModel parameterModel, IQueryable<User> baseQuery)
{
    var orderedQuery = (IOrderedQueryable<User>)baseQuery;

    for (int i = 0; i < parameterModel.iSortingCols; ++i)
    {
        var ascending = string.Equals("asc", parameterModel.sSortDir[i], StringComparison.OrdinalIgnoreCase);
        int sortCol = parameterModel.iSortCol[i];

        Expression<Func<User, string>> orderByExpression = GetOrderingFunc(sortCol);
        if (orderByExpression != null)
        {
            if (ascending)
            {
                orderedQuery = (i == 0)
                    ? orderedQuery.OrderBy(orderByExpression)
                    : orderedQuery.ThenBy(orderByExpression);
            }
            else
            {
                orderedQuery = (i == 0)
                    ? orderedQuery.OrderByDescending(orderByExpression)
                    : orderedQuery.ThenByDescending(orderByExpression);
            }
        }
        else
        {
            if (ascending)
            {
                orderedQuery = (i == 0)
                    ? orderedQuery.OrderBy(c => c.Id)
                    : orderedQuery.ThenBy(c => c.Id);
            }
            else
            {
                orderedQuery = (i == 0)
                    ? orderedQuery.OrderByDescending(c => c.Id)
                    : orderedQuery.ThenByDescending(orderByExpression);
            }
        }

    }
    return orderedQuery;
}


private Expression<Func<User, string>> GetOrderingFunc(int ColumnIndex)
{
    Expression<Func<User, string>> InitialorderingFunction;
    switch (ColumnIndex)
    {
        case 1:
            InitialorderingFunction = c => c.FirstName;
            break;
        case 2:
            InitialorderingFunction = c => c.LastName;
            break;
        case 3:
            InitialorderingFunction = c => c.UserName;
            break;
        case 4:
            InitialorderingFunction = c => c.Email;
            break;
        case 5:
            InitialorderingFunction = c => c.BusinessName;
            break;
        default:
            InitialorderingFunction = null;
            break;
    }

    return InitialorderingFunction;
}

我想,你的问题与这两个答案非常接近:

:


用这些解决方案来检查这个答案,谢谢你的评论,我得到了一个类似的解决方案
public static RouteValueDictionary GetInfo<T,P>(this HtmlHelper html, Expression<Func<T, P>> action) where T : class
{
    var expression = (MemberExpression)action.Body;
    string fieldName = expression.Member.Name;
var result = data
    .Where(/* ... */)
    .Select(/* ... */)
    .OrderBy(fieldName + " asc");