use*_*072 2 c# linq entity-framework asp.net-web-api
我正在尝试查询数据,其结果是降序.当我查询 -
StartDate=04/09/2014&EndDate=04/16/2014,
Run Code Online (Sandbox Code Playgroud)
我得到的结果显示从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);
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?请指教.
你有点偏离这里.首先,如果您对列表重新排序4次,前3个将是浪费时间.我不确定你的逻辑是什么,所以我会留下它.您需要重新考虑过滤逻辑.
其次,Func你传递的是OrderByDescending获得订购的关键 ; 它不执行过滤.所以当你这样做时:
data = data.OrderByDescending(c => c.UploadDate >= query.startDate)
Run Code Online (Sandbox Code Playgroud)
true如果您的上传日期在查询开始日期之后,并且false在查询开始日期之前,则使用密钥.因此,您将获得所有trues后面的所有falses.你根本不是按日期订购的.
要按日期订购,您需要执行以下操作:
data.Where(c => c.UploadDate >= query.startDate)
.OrderByDescending(c => c.UploadDate)
Run Code Online (Sandbox Code Playgroud)
这将选择上载日期在查询开始日期之后的所有项目,然后按顺序排序UploadDate.
我的建议是首先使用你的每个过滤器Where,然后通过做OrderByDescending(c => c.UploadDate)(或你打算订购的任何财产)最后做你的订购.
| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |