2012-10-18 84 views
2

可能重複:
Linq orderby, start with specific number, then return to lowest排序月份名稱的列表與當前月開始

我需要創建一個組合框,其中列出了一年中的月份,但需要它來啓動與當前月份的 ,然後按月份順序排列,例如:

十月
十一月

一月
二月
三月
等.....

的數據源是一個數據庫,它是根據月號編號月份列表(即1月= 1等),然後操縱以給出日期時間

如何在C#中對此列表進行排序,以便獲得我想要的訂單?

TIA。

+2

[你嘗試過什麼(http://whathaveyoutried.com)? – Oded

回答

4
string[] months = CultureInfo.CurrentCulture.DateTimeFormat.MonthNames; 
var ordered = months.Skip(DateTime.Today.Month - 1) 
        .Concat(months.Take(DateTime.Today.Month - 1)) 
        .Where(s=>!String.IsNullOrEmpty(s)) 
        .ToList(); 
3

使用DateTimeFormatInfo.GetMonthName methoed

List<string> list = new List<string>(); 
DateTimeFormatInfo dtFI = new DateTimeFormatInfo(); 
DateTime currentDate = DateTime.Now; 
DateTime nextyearDate = currentDate.AddYears(1).AddDays(-1); 
while (currentDate < nextyearDate) 
{ 
    list.Add(dtFI.GetMonthName(currentDate.Month)); 
    currentDate = currentDate.AddMonths(1); 
} 

這將創建個月的新列表,從當月開始。

2

另取這個與LINQ:

// month name source, use what you prefer 
var monthNames = CultureInfo.CurrentCulture.DateTimeFormat.MonthNames; 
var sorted = Enumerable.Range(1, 12).Zip(monthNames, Tuple.Create) 
      .OrderBy(t => (t.Item1 - DateTime.Today.Month + 12) % 12) 
      .Select(t => t.Item2) 
      .ToArray(); 
0

你可以得到個月的名單在C#與List<DateTime> monthNames = DateTimeFormatInfo.CurrentInfo.MonthNames.ToList();。它在最後得到一個List<DateTime> 13元(空月份的名字,但你可以隨時刪除最後一個元素monthNames.RemoveAt(monthNames.Count - 1); http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo.monthnames.aspx

要重新排序此列表,您可以使用DateTime.Now.Month.ToString("00");獲得當前的月份數指數,並重組名單newMonthNames = monthNames.GetRange(index, 12 - index).AddRange(monthNames.GetRange(0, index);

有很多方法可以做到這一點,像其他人已經表明。