我有一个包含 GMT 格式日期的列表。
确保以下 Lambda 表达式在日期字段上排序为 GMT 的最优雅方法是什么?
ProductsList.OrderBy(Product => Product.Added).ToList();
内置的 LINQ 运算符使用预期的排序操作(对于 LINQ-to-Objects,它使用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();
请注意,这实际上创建了第二个列表(它不会更改原始列表的顺序);您可以使用此处的代码使用 lambdas 进行就地排序:
ProductsList.Sort(Product => Product.Added);