如何在linq中使用orderbydescending进行查询



我正在尝试查询数据,结果按降序排列。当我查询时——

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次将是浪费时间。我不确定你的逻辑是什么,所以我就到此为止。你需要重新思考你的过滤逻辑。

其次,您传递给OrderByDescendingFunc得到以进行排序;它不执行过滤。所以当你这样做的时候:

data = data.OrderByDescending(c => c.UploadDate >= query.startDate)

如果上传日期在查询开始日期之后,则使用true密钥;如果上传日期早于查询开始日期,则使用false密钥。所以你会得到所有的true,然后是所有的false。你根本没有按日期排序。

要在日期前订购,您需要执行以下操作:

data.Where(c => c.UploadDate >= query.startDate)
    .OrderByDescending(c => c.UploadDate)

这会选择上传日期在查询开始日期之后的所有项目,然后UploadDate订购。

我的建议是,首先使用Where应用每个过滤器,然后在最后使用OrderByDescending(c => c.UploadDate)(或您计划订购的任何属性)进行订购。

您没有按日期排序。。您是通过布尔表达式排序的。

data = data.OrderByDescending(c => c.UploadDate <= query.endDate).Take(pageSize);
//                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ bool

我不太明白你想在那里实现什么。。但这是你的问题。如果你能再扩大一点,我可以进一步提供帮助。

你试过这个吗

data.Where(c => c.UploadDate >= query.startDate).OrderByDescending(c => c.UploadDate)

我认为您可能试图在这些日期之间进行筛选,然后按降序排列。试试这个:

       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);

相关内容

  • 没有找到相关文章

最新更新