Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Web Api 2.0在Linq中订购_C#_Linq_Asp.net Web Api2 - Fatal编程技术网

C# 使用Web Api 2.0在Linq中订购

C# 使用Web Api 2.0在Linq中订购,c#,linq,asp.net-web-api2,C#,Linq,Asp.net Web Api2,我有一个从db检索订单的控制器,控制器接收4个查询字符串:_page、_perPage、_sortDir和_sortField,我的问题是排序方向,ASC或DESC不知道为什么,但linq似乎忽略了我给它的订单。 首先,我按orderId进行订购,因为我无法在不进行订购的情况下使用skip方法,然后,当我尝试订购时,我无法执行。我做错了什么?谢谢 我的控制器: public async Task<HttpResponseMessage> GetOrder(int _page, int

我有一个从db检索订单的控制器,控制器接收4个查询字符串:_page、_perPage、_sortDir和_sortField,我的问题是排序方向,ASC或DESC不知道为什么,但linq似乎忽略了我给它的订单。 首先,我按orderId进行订购,因为我无法在不进行订购的情况下使用skip方法,然后,当我尝试订购时,我无法执行。我做错了什么?谢谢

我的控制器:

public async Task<HttpResponseMessage> GetOrder(int _page, int _perPage,string _sortDir,string _sortField) {

            var order = await db.Order.Select(x => new {
                OrderId = x.OrderId,
                UserId = x.UserId,
                orderStatusCode = x.orderStatusCode
                ---------------
                More Code Not Important
                --------------

                }
            }).OrderBy(x => x.OrderId).Skip((_page - 1) * _perPage).Take(_perPage).ToListAsync();
            switch (_sortDir) {
                case "ASC":
                    order.OrderBy(x=>_sortField);
                    break;
                case "DESC":
                    order.OrderByDescending(x => _sortField);
                    break;
                default:
                    order.OrderBy(x=>x.OrderId);
                    break;
            }
            var response = Request.CreateResponse(HttpStatusCode.OK, order);
            response.Headers.Add("X-Total-Count", db.User.Count().ToString());
            return response;
        }
public async Task GetOrder(int\u page,int\u perPage,string\u sortDir,string\u sortField){
var order=await db.order.Select(x=>new{
OrderId=x.OrderId,
UserId=x.UserId,
orderStatusCode=x.orderStatusCode
---------------
更多代码并不重要
--------------
}
}).OrderBy(x=>x.OrderId).Skip(_page-1)*_perPage.Take(_perPage.ToListAsync();
开关(sortDir){
案例“ASC”:
order.OrderBy(x=>\u sortField);
打破
案例“DESC”:
order.OrderByDescending(x=>\u sortField);
打破
违约:
order.OrderBy(x=>x.OrderId);
打破
}
var response=Request.CreateResponse(HttpStatusCode.OK,order);
Add(“X-Total-Count”,db.User.Count().ToString());
返回响应;
}
表面上的问题是,您没有在任何地方分配重新排序的列表
OrderBy()
不会更改列表本身,它会返回一个新的已排序的
IEnumerable
。最快的修复方法是,在您的
开关案例中
,更改每个
订单
order=order.OrderBy(…)


此问题和此代码可能存在更深层次的问题。最明显的是:通常情况下,在分页场景中请求备用排序时,人们期望分页与排序相关。但是,如果分页筛选器具有默认顺序,则可以对结果进行排序。注意:我不知道您的实际需求,但在大多数情况下,这会产生严重的混乱和用户错误。

看起来您需要使用反射或其他方法将字符串
sortField
转换为可与
OrderBy
一起使用的表达式。