2010-02-05 63 views
1

我有一個列表,其中包含GMT格式的日期。使用Lambda表達式按格林尼治平時間排序列表日期

確保日期字段中的以下Lambda表達式命令以GMT格式的最優雅方式是什麼?

ProductsList.OrderBy(Product => Product.Added).ToList(); 
+0

你是什麼意思「在格林尼治標準時間格式」是什麼意思?新增屬性的類型是什麼?格林威治標準時間 – 2010-02-05 10:42:41

+0

。添加的是從sql數據庫檢索的DateTime字段。順便說一句,我知道這個問題是一個喬恩Skeet蜂蜜陷阱!大聲笑; - > – 2010-02-05 10:45:28

+1

GMT是如何相關的? 'Added'屬性是否包含各個時區的日期?如果他們全部在同一時區,那麼如果您只是按日期排序,或者您首先將所有日期首先轉換爲GMT,那麼訂單不會更改。我想我在這裏丟失了一些東西... – 2010-02-05 10:50:11

回答

2

內置的LINQ運營商使用預期的排序操作(LINQ到對象,爲此,它使用Comparer<T>.Default你的lambda表達式是強類型的,幕後的編譯器推斷出一些仿製藥給你 - 這是。實際上:

var newList = Enumerable.OrderBy<Product,DateTime>(
     ProductsList, Product => Product.Added).ToList(); 

它已經知道它是一個DateTime,所以唯一一次你需要做些額外的事情在這裏,如果你的日期包含一系列不同的時區的過程中,一個。你的時區HOULD被罰款,但你可以(如果你是偏執狂)轉換所有UTC - 我不認爲需要做的,你的情況,但:

var newList = ProductsList.OrderBy(
     Product => Product.Added.ToUniversalTime()).ToList(); 

注意,這實際上創建了一個第二個列表(它不會改變原始列表的排序);您可以使用code from here來排序做一個就地使用lambda表達式:

ProductsList.Sort(Product => Product.Added); 
+0

謝謝,正是我需要的! – 2010-02-05 14:03:21

相關問題