2010-12-19 85 views
3

我無法弄清楚如何在隔離存儲器中的XML文件中查詢的輸出按xml文件中的值排序。由此我的意思是它將按當天的第一個字母排序,所以它將在星期五作爲第一個字母(因爲其中的「F」)返回。但這不是我想要的,而應該按星期,即星期一,星期二,星期三,星期四,星期五的順序排序。如何按平日(如日曆周)的順序排序而不是按字母順序排列(在C#中)?

有什麼辦法可以轉換一個字符串,其中包含文本中的一天例如。 「星期一」到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

該OP需要按日期排序,而不是按字母順序排序。 – Oded 2010-12-19 17:25:24

+1

@Oded:我很清楚這一點。這就是'IndexOf'所做的。 – SLaks 2010-12-19 17:27:34

+0

@SLaks - 對不起,錯過了那一點...... – Oded 2010-12-19 17:34:49

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