我正在尝试查询数据,结果按降序排列。
当我查询-
StartDate=04/09/2014&EndDate=04/16/2014,
我从第9位而不是第16位显示结果。我不清楚这是如何实现的。这是我目前拥有的:
public HttpResponseMessage Get([FromUri] Query query)
{
var data = db.data_bd.AsQueryable();
int pageSize = 10;
if (query.price_type != null)
{
data = data.Where(c => c.Cover == query.price_type);
}
if (query.endDate != null)
{
data = data.Where(c => c.UploadDate <= query.endDate);
}
if (query.startDate != null)
{
data = data.Where(c => c.UploadDate >= query.startDate);
}
// If any other filters are specified, return records which match any of them:
var filteredData = new List<IQueryable<data_bd>>();
if (!string.IsNullOrEmpty(query.name))
{
var ids = query.name.Split(',');
foreach (string i in ids)
{
filteredData.Add(data.Where(c => c.Name != null && c.Name.Contains(i)));
}
}
if (filteredData.Count != 0)
{
data = filteredData.Aggregate(Queryable.Union);
}
if (!data.Any())
{
var message = string.Format("No data was found");
return Request.CreateErrorResponse(HttpStatusCode.NotFound, message);
}
if (query.startDate != null)
{
data = data.OrderByDescending(c => c.UploadDate >= query.startDate).Take(pageSize);
}
if (filteredData.Count != 0)
{
data = data.OrderByDescending(d => d.UploadDate).Take(pageSize);
}
//return Request.CreateResponse(HttpStatusCode.OK, data);
}
我想念什么吗?请指教。
最佳答案
你离这里有点远。首先,如果您对列表进行4次重新排序,则前3次将浪费时间。我不确定您的逻辑在那里,所以我将其保留。您需要重新考虑您的过滤逻辑。
其次,传递给Func
的OrderByDescending
获取排序依据。它不执行过滤。因此,当您这样做时:
data = data.OrderByDescending(c => c.UploadDate >= query.startDate)
如果上载日期在查询开始日期之后,则使用
true
键;如果上载日期在查询开始日期之前,则使用键。因此,您将获得所有false
,然后是所有true
。您根本没有按日期订购。要按日期排序,您需要执行以下操作:
data.Where(c => c.UploadDate >= query.startDate)
.OrderByDescending(c => c.UploadDate)
这将选择上载日期在查询开始日期之后的所有项目,然后按
false
对其进行排序。我的建议是先使用
UploadDate
应用每个过滤器,然后最后通过执行Where
(或计划按其排序的任何属性)进行排序。关于c# - 如何使用orderbydescending在linq中查询?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23131743/