2010-12-19 16 views
3

xmlファイルの値である日までに、隔離されたストレージ内のXMLファイルのクエリから出力をソートする方法を考えることができません。アルファベット順ではなく平日の順番で並べ替える方法(C#で)

これは、1日の最初の文字でソートするので、最初の1文字として金曜日が返されることを意味します(「F」のため)。しかし、それは私が望むものではなく、平日、火曜日、水曜日、木曜日、金曜日の順番で並べ替えるべきです。

テキストを含む文字列を変換する方法はありますか? "monday"をDateTimeにソートする?

私が使用していたコードはそうのようなものです:

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

答えて

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 
+0

アルファベット順ではなく、日順で並べ替える必要があります。 – Oded

+1

@Oded:私はそれをよく知っています。これが 'IndexOf'のやり方です。 – SLaks

+0

@SLaks - 申し訳ありませんが、そのビットを逃しました... – Oded

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); 
    } 
} 
関連する問題