.OrderBy(DayOfWeek) to treat Sunday as the end of the week

后端 未结 2 1122
轻奢々
轻奢々 2021-02-12 12:16

I\'m ordering a number of objects by their System.DayOfWeek property.

DayOfWeek treats Sunday as the start of the week, whereas I would like it to be ordered so

相关标签:
2条回答
  • 2021-02-12 12:49

    I use a solution based on current culture:

    // 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);
    

    The important part is the OrderBy lambda. It's basically a parametrized version of Jon's answer above.

    This way it will be ordered from Monday in the UK, and from Sunday in the US.

    0 讨论(0)
  • 2021-02-12 12:50

    The simplest approach would be:

    var orderedTimeBands = timeBands.OrderBy(x => ((int) x.DayOfWeek + 6) % 7)
                                    .ToList()
    

    So we have:

    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
    

    ... which is what you want, I think.

    0 讨论(0)
提交回复
热议问题