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

时间:2013-09-03 11:23:44

标签: c# .net linq dayofweek

我按照System.DayOfWeek属性订购了多个对象。

DayOfWeek将星期日视为本周的开始,而我希望它被订购,以便它出现在 end 。它只是一个枚举,所以我无法修改它。但是我读过我可以创建一个custom culture,但认为这可能有点过头了。

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

所以DayNameDayOfWeek,我想要从星期一开始订购orderedTimeBands - &gt;周日。

有什么想法吗?

2 个答案:

答案 0 :(得分:40)

最简单的方法是:

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

...我认为这就是你想要的。

答案 1 :(得分:4)

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

// 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 lambda。它基本上是参数化版本Jon's answer以上

这种方式将从英国周一和美国周日订购。