使用Lambda表达式按GMT日期排序列表

时间:2010-02-05 10:37:17

标签: c# datetime lambda gmt

我有一个包含GMT格式日期的列表。

确保以下Lambda表达式在日期字段上按GMT排序的最优雅方法是什么?

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

1 个答案:

答案 0 :(得分:2)

内置的LINQ运算符使用预期的排序操作(对于LINQ到对象,它使用Comparer<T>.Default执行此操作。您的lambda表达式是强类型的;在后台编译器为您推断了一些泛型 - 它是实际上:

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

已经知道它是DateTime,因此,如果您的日期包含一系列不同的时区,那么您需要在此处执行额外操作的唯一时间。当然,时区你应该没问题,但你可以(如果你是偏执狂)将所有转换为UTC - 我不想想你需要这样做你的情况,但是:

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

请注意,这实际上会创建一个第二个列表(它不会更改原始列表的顺序);您可以使用code from here使用lambdas进行就地排序:

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