m.edmondson m.edmondson - 1 month ago 6
C# Question

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

I'm ordering a number of objects by their

property.

DayOfWeek treats Sunday as the start of the week, whereas I would like it to be ordered so it appears at the end. It's just an enum, so I can't modify it. However I've read that I may be able to create a custom culture but think this is probably overkill.

List<TimeBand> orderedTimeBands = timeBands.OrderBy(x => x.DayName).ToList()


So
DayName
is a
DayOfWeek
, i want
orderedTimeBands
to be ordered from Monday -> Sunday.

Any ideas?

Answer

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.

Comments