我有一个包含GMT格式日期的列表。
确保以下Lambda表达式在日期字段上按GMT排序的最优雅方法是什么?
ProductsList.OrderBy(Product => Product.Added).ToList();
答案 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);