У меня есть список, содержащий даты в формате GMT.
Каков наиболее элегантный способ гарантировать, что следующие лямбда-выражения упорядочены в поле даты как GMT?
ProductsList.OrderBy(Product => Product.Added).ToList();
У меня есть список, содержащий даты в формате GMT.
Каков наиболее элегантный способ гарантировать, что следующие лямбда-выражения упорядочены в поле даты как GMT?
ProductsList.OrderBy(Product => Product.Added).ToList();
Встроенные операторы LINQ используют ожидаемые операции сортировки (для LINQ-to-Objects он делает это с помощью Comparer<T>.Default
. Ваше лямбда-выражение строго типизировано; за кулисами компилятор сделал для вас некоторые обобщения - на самом деле это:
var newList = Enumerable.OrderBy<Product,DateTime>(
ProductsList, Product => Product.Added).ToList();
Он уже знает, что это DateTime
, поэтому единственный раз, когда вам нужно сделать что-то дополнительное, это если ваши даты содержат диапазон разных часовых поясов. Конечно, в часовом поясе все должно быть в порядке, но вы можете (если бы вы были параноиком) преобразовать все в UTC - я не думаю, что вам нужно делать это в ваш случай, но:
var newList = ProductsList.OrderBy(
Product => Product.Added.ToUniversalTime()).ToList();
Обратите внимание, что это фактически создает второй список (он не меняет порядок исходного списка); вы можете использовать код отсюда для сортировки на месте с использованием лямбда-выражений:
ProductsList.Sort(Product => Product.Added);
Added
даты для разных часовых поясов? Если все они находятся в одном часовом поясе, порядок не изменится, если вы просто отсортируете их по дате или если вы сначала конвертируете все даты в GMT. Думаю, я что-то здесь упускаю ... - person Fredrik Mörk   schedule 05.02.2010