订单不工作

时间:2016-09-08 22:01:29

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

我正在使用动态排序对多个条件进行排序,这是我的代码:

    public ActionResult WebGrid(int page = 1, int rowsPerPage = 10, string sortCol = "OrderID", string sortDir = "ASC", string sortSecCol = "OrderID", string sortSecDir = "ASC")
    {
        List<Orders> res;

        using (var nwd = new NorthwindEntities())
        {
            var _res = nwd.Orders
                .AsQueryable()
                .OrderBy(sortCol + " " + sortDir, sortSecCol + " " + sortSecDir)
                .Skip((page - 1) * rowsPerPage)
                .Take(rowsPerPage)
                .Select(o => new Orders  
                {

我在这里要做的是,我希望列OrderID只要它不是主要排序就是次要排序,但是当我实际选择其他列作为主要排序时它不起作用分类。

换句话说,当其他列按降序选择为主要排序时,OrderID也应该按降序排列,我不确定我在代码中错过了什么。

我使用的OrderBy方法来自here (MSDN)

2 个答案:

答案 0 :(得分:4)

您使用的方法具有以下签名:

public static IQueryable<T> OrderBy<T>(
    this IQueryable<T> source,
    string ordering,
    params object[] values
)

所以sortSecCol + " " + sortSecDir转到values参数,而整个排序应该在ordering参数中以逗号分隔列表的形式提供。

你可以改用这样的东西:

var ordering = sortCol + " " + sortDir;
if (sortSecCol != sortCol)
    ordering += ", " + sortSecCol + " " + sortSecDir;
...
   .OrderBy(ordering)
...

答案 1 :(得分:0)

试试这个: