2010-02-05 30 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

相关问题