Использование лямбда-выражений для упорядочения списка по дате GMT - PullRequest
1 голос
/ 05 февраля 2010

У меня есть список, содержащий даты в формате GMT.

Каков самый элегантный способ убедиться, что следующие лямбда-выражения упорядочены в поле даты как GMT?

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

1 Ответ

2 голосов
/ 05 февраля 2010

Встроенные операторы 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);
...