2013-08-06 92 views
9

我有一個日期時間列表,如果可能的話,我想使用lambda表達式對它進行排序。按時間排序日期時間列表

我的列表:

6/19/1979 8:00:00 AM 
5/5/1980 7:00:00 PM 
10/20/1982 5:00:00 PM 
1/4/1984 6:00:00 AM 

輸出應該按以下順序:

1/4/1984 6:00:00 AM 
6/19/1979 8:00:00 AM 
10/20/1982 5:00:00 PM 
5/5/1980 7:00:00 PM 
+0

對於未來的帖子,請儘量避免標題中的標籤和各種「感謝信」。隨意討論[meta](http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts) –

+0

奇怪的是,在這個問題與本頁面上的問題相同:http://www.dotnetperls.com/sort-datetime –

回答

30

簡單,OrderByTimeOfDay

var list = dateList.OrderBy(x => x.TimeOfDay).ToList(); 
// ToList added in response to comment. 
+1

雖然我的解決方案確實有效,但這個更好。 –

+0

+1優雅。你是如此接近10K :) –

+1

當我使用你的方法時,我得到這個錯誤:「不能隱式轉換類型'System.Linq.IOrderedEnumerable '到'System.Collections.Generic.List <系統。 DateTime>'。顯式轉換存在(您是否缺少一個轉換?)「代碼:時間是列表:Times = Times.OrderBy(x => x.TimeOfDay); – user2138160

0
var result=dates.OrderBy(d=>d-d.Date); 
3

以上方法僅當人L上的日期是相同的,萬一日期也不同,你應該做到以下幾點...

var sortedDates = dates.OrderByDescending(x => x); 

或者不想使用,或者不知道的LINQ,那麼你可以去以下。 。

static List SortAscending(List list) 
{ 
list.Sort((a, b) => a.CompareTo(b)); 
return list; 
} 

static List SortDescending(List list) 
{ 
list.Sort((a, b) => b.CompareTo(a)); 
return list; 
} 
+0

請注意,由OP公佈的樣本數據無視日期而贊成時間。 –

+2

這個linq解決方案實際上是唯一對我有用的工作。其他的沒有很好的排序日期時間我添加了.last()用於獲取最早的更新,並且當其他人不用時它工作得很好。 – Zwan

0

使用此解決方案

list<DateTime> YourList=new list<DateTime>(); 
. 
. 
. 
YourList.OrderByDescending(x=>x.Date).ThenByDescending(x=>x.TimeOfDay).ToList() 
0

list.Sort((a, b) => a.CompareTo(b));凡列表是你數組變量。