Linq to sql: упорядочить по datetime desc, затем упорядочить по временной части данных asc? - PullRequest
20 голосов
/ 29 марта 2011

Это быстрый.
В Linq to sql мне нужно упорядочить по убыванию поля даты и времени, а затем упорядочить по части времени той же даты и времени по возрастанию, имеет смысл? Вот пример необходимого результата:

[Серийный номер] [Дата (мм-дд-гггг: чч-мм-сс)]
1 3-13-2008: 10-10-02
2 3-13-2008: 10-12-60
3 3-12-2008: 12-05-55


Я пытался:

return query.OrderByDescending(c=> c.Time).ThenBy(c=> c.Time.TimeOfDay);


А также попробовал:

query.OrderByDescending(c => c.Time).ThenBy(c => c.Time.Hour).ThenBy(c=> c.Time.Minute).ThenBy(c=> c.Time.Second);


но никогда не работал. Есть предложения?

Ответы [ 4 ]

51 голосов
/ 29 марта 2011

Используйте свойства Date и TimeOfDay для сортировки.

return query
   .OrderByDescending(c=> c.Time.Date)
   .ThenBy(c=> c.Time.TimeOfDay);
16 голосов
/ 29 марта 2011

Проблема в том, что «Время» содержит информацию о дате и времени, таким образом, уже сортируется полностью. Сначала вам нужно взять часть даты для сортировки.

return query.OrderByDescending(c=> c.Time.Date).ThenBy(c=> c.Time.TimeOfDay);

Не проверено:)

4 голосов
/ 29 марта 2011

Я думаю, что first orderByDescending сортирует все по дате и времени (дата + время), поэтому следующие orderbys вступят в силу только в том случае, если у вас есть какие-либо записи с одинаковой отметкой времени.

Попробуйте это

query.OrderByDescending(c=> c.Time.Date).ThenBy(c=> c.Time.TimeOfDay)
1 голос
/ 23 января 2018

Преврати его в галочки, тоже будет работать:

return query.OrderByDescending(c=> c.Time.Ticks)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...