2010-12-19 12 views
3

Ich kann nicht herausfinden, wie die Ausgabe von einer Abfrage in einer XML-Datei im isolierten Speicher bis zum Tag sortiert wird, was ein Wert in der XML-Datei ist.Wie wird nach der Reihenfolge der Wochentage (wie in einer Kalenderwoche) statt nach alphabetischer Reihenfolge (in C#) sortiert?

Damit meine ich, dass es nach dem/den ersten Buchstaben des Tages sortiert, also wird es Freitag als erstes zurückgeben (wegen des "F" darin). Aber das ist nicht was ich will, stattdessen sollten sie nach der Reihenfolge der Wochentage sortiert werden, d. H. Montag, Dienstag, Mittwoch, Donnerstag, Freitag.

Gibt es eine Möglichkeit, eine Zeichenfolge, die den Tag in Text enthält, z. B. konvertieren kann. "Montag" zu einer DateTime nach der sortiert werden soll?

Der Code ich verwende ist etwa so:

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

Antwort

3

Sie durch den Wert des Index in der CultureInfo.CurrentCulture.DateFormat.DayNames Array sortieren:

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

Das OP muss nach der Reihenfolge der Tage sortieren, nicht nach der alphabetischen Reihenfolge. – Oded

+1

@Oded: Ich bin mir dessen bewusst. Das macht 'IndexOf'. – SLaks

+0

@SLaks - sorry, verpasste das bisschen ... – Oded

0

Auf diese Weise können Sie mit einem beliebigen Tag des sortieren Woche:

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); 
    } 
} 
Verwandte Themen