我按照System.DayOfWeek
属性订购了多个对象。
DayOfWeek将星期日视为本周的开始,而我希望它被订购,以便它出现在 end 。它只是一个枚举,所以我无法修改它。但是我读过我可以创建一个custom culture,但认为这可能有点过头了。
List<TimeBand> orderedTimeBands = timeBands.OrderBy(x => x.DayName).ToList()
所以DayName
是DayOfWeek
,我想要从星期一开始订购orderedTimeBands
- &gt;周日。
有什么想法吗?
答案 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以上。
这种方式将从英国周一和美国周日订购。