如何按工作日的顺序排序(如在日历周中)而不是字母顺序(在C#中)?

时间:2010-12-19 17:18:59

标签: c# silverlight xaml windows-phone-7

我无法弄清楚如何在隔离存储中的XML文件中查询输出到xml文件中的值。

我的意思是它将按当天的第一个字母排序,因此它将作为第一个字母返回星期五(因为它中的“F”)。但这不是我想要的,而是按工作日的顺序排序,即星期一,星期二,星期三,星期四,星期五。

有什么方法可以转换包含文本日期的字符串,例如。 “星期一”到DateTime排序?

我正在使用的代码是这样的:

 let obv = (string)query.Element("day")
 orderby obv 
 select new obv 

2 个答案:

答案 0 :(得分:3)

您可以按CultureInfo.CurrentCulture.DateFormat.DayNames数组中的值索引进行排序:

var daynames = Array.ConvertAll(
    CultureInfo.CurrentCulture.DateFormat.DayNames,
    d => d.ToUpperInvariant()
);

from ...
let obv = (string)query.Element("day")
orderby Array.IndexOf(daynames, obv.ToUpperInvariant())
select new obv 

答案 1 :(得分:0)

这允许您按一周中的任意一天排序:

public class DayOfWeekComparer : IComparer<DayOfWeek>
{
    public static int Rank(DayOfWeek firstDayOfWeek, DayOfWeek x)
    {
        return (int)x + (x < firstDayOfWeek ? 7 : 0);
    }

    public static int Compare(DayOfWeek firstDayOfWeek, DayOfWeek x, DayOfWeek y)
    {
        return Rank(firstDayOfWeek, x).CompareTo(Rank(firstDayOfWeek, y));
    }

    DayOfWeek firstDayOfWeek;

    public DayOfWeekComparer(DayOfWeek firstDayOfWeek)
    {
        this.firstDayOfWeek = firstDayOfWeek;
    }

    public int Compare(DayOfWeek x, DayOfWeek y)
    {
        return DayOfWeekComparer.Compare(this.firstDayOfWeek, x, y);
    }
}