.OrderBy(DayOfWeek)将星期日视为本周结束

我通过他们的System.DayOfWeek属性订购了许多对象。

DayOfWeek将星期日视为本周的开始 ,而我希望它被订购以便最终出现。 它只是一个枚举,所以我无法修改它。 但是我已经读过,我可以创建一个自定义文化,但认为这可能是矫枉过正。

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

所以DayNameDayOfWeek ,我想从周一 – >周日订购orderedTimeBands

有任何想法吗?

最简单的方法是:

 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 

……我想,这就是你想要的。

我使用基于当前文化的解决方案:

 // all days of week var daysOfWeek = Enum.GetValues(typeof(DayOfWeek)).Cast(); // 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 lambda。 它基本上是Jon的答案参数化版本

这样,它将从周一在英国订购,从周日在美国订购。