2016-04-13 263 views
1

我在我的sql服務器數據庫中以nvarchar(「HH:mm」)格式保存時間字段。 C#列表按時間倒序按時間順序排序

根據每個人的建議。我現在將時間以DateTime格式保存在我的sql服務器數據庫中。雖然我不需要日期部分,但我會使用這個屬性,以便達到我試圖做的效果。 現在我想要做的是根據當前的執行時間獲取反向時間順序的行列表。例如,如果我的表看起來像這樣:

tblFavoriteTime 
ID  Time  Post 
1  05:00 AM Something.. 
2  09:00 AM Another.. 
3  12:00 PM Hello.. 
4  01:00 PM Its 8 am.. 

當我訪問該網站在下午12:00,我需要的時間按時間倒序排列的列表。所以,12:00 PM會在列表的頂部,12:00PM -> 11:00AM -> 10:00AM -> .... 1:00AM -> 12:00AM -> 01:00PM -> 02:00PM -> ..... 11:00PM使用上面的數據,我應該得到:

ID  Time   Post 
3  12:00 PM  Hello... 
2  09:00 AM  Another.. 
1  05:00 AM  Something.. 
4  01:00 PM  Its 1 pm.. 

有沒有辦法做到這一點使用LinQ .OrderBy()或者是這樣的:

var mylist = _repository.GetAll().ToList() 
      .OrderBy(x => x.TimeStamp.TimeOfDay() .......); 
      //as I explained, Im only getting the time of day though its a datetime object, date part wont matter.. 

請幫忙!

+0

如何13:00最後排序後? –

+6

爲什麼要將[time](https://msdn.microsoft.com/zh-CN/library/bb677243.aspx)作爲nvarchar存儲? –

+0

@EhsanSajjad讓我們說你有一個時鐘,當你在上午12:00看着它時,想象時鐘會逆時針轉動,'12AM - > 11AM - > ... - > 1AM - > 12PM - 1 PM' –

回答

3

這是做你想做的嗎?

var times = new [] { "10:30", "22:40", "12:00", "10:00", "13:00", "08:00", }; 

var output = times.OrderByDescending(x => (x.CompareTo("10:00") <= 0 ? "Z" : "") + x); 

我得到如下:

 
10:00 
08:00 
22:40 
13:00 
12:00 
10:30 

嘗試此DateTime領域。

var times = 
    new [] { "10:30", "22:40", "12:00", "10:00", "13:00", "08:00", } 
     .Select(x => DateTime.Parse(x)); 

var output = times.OrderByDescending(x => (x.TimeOfDay.TotalHours <= 10 ? 24.0 : 0.0) + x.TimeOfDay.TotalHours); 

我得到了和上面相同的結果。

+0

是的即時嘗試做這種輸出。但是我應該引用什麼來使用CompareTo(),在調用它時會得到紅色的波浪線,而我的vs2013不能自動解決它 –

+0

如果我有一個DateTime對象數組,我該如何使用它?我試圖按照評論部分中的人們的建議使用適當的DateTime屬性。 –

+0

請參閱我的編輯.. –

0

如果您是「卡住」與nvarchar,那麼您可以先解析爲TimeSpan,例如,

var times = new [] { "10:30", "22:40", "12:00", "10:00", "13:00", "08:00", }; 
var output = times.OrderByDescending(x => TimeSpan.Parse(x)); 
+0

請看我的編輯.. –

0
TimeSpan now = DateTime.Now.TimeOfDay; //site visit time 

var query = rows.ToList() 
    .OrderBy(x => x.TimeStamp.TimeOfDay <= now ? 1 : 2) 
    .ThenByDescending(x => x.TimeStamp.TimeOfDay); 
+0

請看我的編輯.. –