c# .net linq dayofweek

c# - .OrderBy(DayOfWeek) para tratar el domingo como el fin de semana



.net linq (2)

Estoy ordenando un número de objetos por su propiedad System.DayOfWeek .

System.DayOfWeek trata el domingo como el comienzo de la semana, mientras que me gustaría que se ordenara para que aparezca al final . Es solo una enumeración, así que no puedo modificarlo. Sin embargo, he leído que puedo crear una cultura personalizada, pero creo que probablemente sea una exageración.

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

Así que DayName es un DayOfWeek , quiero que se orderedTimeBands de tiempo ordenadas de lunes a domingo.

¿Algunas ideas?


El enfoque más simple sería:

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

Entonces tenemos:

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

... que es lo que quieres, creo.


Uso una solución basada en la cultura actual:

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

La parte importante es el OrderBy lambda. Es básicamente una versión parametrizada de la respuesta anterior de Jon .

De esta manera, se ordenará desde el lunes en el Reino Unido y desde el domingo en los Estados Unidos.