.OrderBy(DayOfWeek), чтобы лечить воскресенье как конец недели
Я заказываю несколько объектов по свойству System.DayOfWeek
.
DayOfWeek рассматривает воскресенье как начало недели, тогда как я бы хотел, чтобы он был заказан, чтобы он появился в конце. Это просто перечисление, поэтому я не могу его изменить. Однако я читал, что я могу создать настраиваемую культуру, но думаю, что это, вероятно, слишком велико.
List<TimeBand> orderedTimeBands = timeBands.OrderBy(x => x.DayName).ToList()
Итак DayName
- это DayOfWeek
, я хочу, чтобы orderedTimeBands
заказывался с понедельника → воскресенье.
Любые идеи?
Ответы
Ответ 1
Самый простой способ:
var orderedTimeBands = timeBands.OrderBy(x => ((int) x.DayOfWeek + 6) % 7)
.ToList()
Итак, мы имеем:
Name Original value Value after arithmetic
Sunday 0 6
Monday 1 0
Tuesday 2 1
Wednesday 3 2
Thursday 4 3
Friday 5 4
Saturday 6 5
... это то, что вы хотите, я думаю.
Ответ 2
Я использую решение, основанное на текущей культуре:
// all days of week
var daysOfWeek = Enum.GetValues(typeof(DayOfWeek)).Cast<DayOfWeek>();
// get first day of week from current culture
var firstDayOfWeek = CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;
// all days of week ordered from first day of week
var daysOfWeekOrdered = daysOfWeek.OrderBy(x => (x - firstDayOfWeek + 7) % 7);
Важной частью является OrderBy
лямбда. Это в основном параметризованная версия Jon answer выше.
Таким образом, он будет заказан с понедельника в Великобритании и с воскресенья в США.