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