.OrderBy(DayOfWeek)将星期日视为本周结束
我通过他们的System.DayOfWeek
属性订购了许多对象。
DayOfWeek将星期日视为本周的开始 ,而我希望它被订购以便最终出现。 它只是一个枚举,所以我无法修改它。 但是我已经读过,我可以创建一个自定义文化,但认为这可能是矫枉过正。
List orderedTimeBands = timeBands.OrderBy(x => x.DayName).ToList()
所以DayName
是DayOfWeek
,我想从周一 – >周日订购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的答案的参数化版本 。
这样,它将从周一在英国订购,从周日在美国订购。