Как отсортировать по порядку дней недели (как в календарной неделе) вместо алфавитного порядка (в C #)? - PullRequest
3 голосов
/ 19 декабря 2010

Я не могу понять, как отсортировать выходные данные запроса в файле XML в изолированном хранилище по дням, которые являются значениями в файле XML.

Под этим я подразумеваю, что он будет сортироваться по первой букве (ям) дня, поэтому он вернет пятницу как первую (из-за "F" в ней) Но это не то, что я хочу, вместо этого они должны быть отсортированы по порядку будних дней, то есть понедельника, вторника, среды, четверга, пятницы.

Есть ли способ, которым я могу преобразовать строку, которая содержит день в тексте, например. "понедельник" в DateTime для сортировки?

Код, который я использую, выглядит так:

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

Ответы [ 2 ]

3 голосов
/ 19 декабря 2010

Вы можете отсортировать по индексу значения в массиве 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 голосов
/ 02 апреля 2014

Это позволяет вам сортировать по произвольному дню недели:

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);
    }
}
...