簡體   English   中英

如何使用orderbydescending在linq中查詢?

[英]How to query in linq using 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 s,然后是所有的false s。 你根本不是按日期訂購的。

要按日期訂購,您需要執行以下操作:

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

這將選擇上載日期在查詢開始日期之后的所有項目, 然后通過UploadDate對其進行UploadDate

我的建議是首先使用Where應用每個過濾器,然后通過執行OrderByDescending(c => c.UploadDate) (或您計划訂購的任何屬性OrderByDescending(c => c.UploadDate)在最后執行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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM