我正在尝试查询数据,结果按降序排列。 当我查询 -
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);
}
我错过了什么吗?请指教。
答案 0 :(得分:5)
你有点偏离这里。首先,如果您对列表重新排序4次,前3个将是浪费时间。我不确定你的逻辑是什么,所以我会把它留在那里。您需要重新考虑过滤逻辑。
其次,您传递给Func
的{{1}}获取键以按顺序排序;它没有执行过滤。所以当你这样做时:
OrderByDescending
如果您的上传日期在查询开始日期之后,则使用data = data.OrderByDescending(c => c.UploadDate >= query.startDate)
的密钥;如果在查询开始日期之前,则true
使用密钥false
。因此,您将获得所有true
s后面的所有false
s。你根本没有按日期订购。
要按 date 订购,您需要执行以下操作:
data.Where(c => c.UploadDate >= query.startDate)
.OrderByDescending(c => c.UploadDate)
选择上传日期在查询开始日期之后的所有项目,然后按UploadDate
排序。
我的建议是首先使用Where
应用每个过滤器,然后通过执行OrderByDescending(c => c.UploadDate)
(或您计划订购的任何属性)在最后执行排序。
答案 1 :(得分:3)
你不按日期排序..你是按布尔表达式排序的。
data = data.OrderByDescending(c => c.UploadDate <= query.endDate).Take(pageSize);
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ bool
我不太明白你想要在那里实现什么......但那是你的问题。如果你可以扩展一点,我可以进一步帮助。
答案 2 :(得分:2)
你试试这个吗?
data.Where(c => c.UploadDate >= query.startDate).OrderByDescending(c => c.UploadDate)
答案 3 :(得分:1)
我认为您可能会尝试在这些日期之间进行过滤,然后按降序排序。试试这个:
if (query.endDate != null)
{
data = data.Where(c => c.UploadDate <= query.endDate).Take(pageSize);
}
if (query.startDate != null)
{
data = data.Where(c => c.UploadDate >= query.startDate).Take(pageSize);
}
data = data.OrderByDescending(c => c.UploadDate);