2

重複の可能性:
Linq orderby、特定の番号で開始し、最小値に戻る

年の月を一覧表示する ComboBox を作成する必要がありますが、現在の月から開始し、残りを月順に並べる必要があります。

10月
11月
12月
1月
2月
3月
etc.....

データソースは、データベース内の月のリストであり、月番号に従って番号が付けられ (つまり、1 月 = 1 など)、日時を与えるために操作されます。

このリストを C# で並べ替えて、必要な順序にするにはどうすればよいですか?

ティア。

4

4 に答える 4

6
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();
于 2012-10-18T10:41:53.633 に答える
3

DateTimeFormatInfo.GetMonthName メソッドを使用する

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

これにより、現在の月から始まる新しい月のリストが作成されます。

于 2012-10-18T10:44:24.543 に答える
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();
于 2012-10-18T10:47:30.223 に答える
0

を使用して、C# で月のリストを取得できますList<DateTime> monthNames = DateTimeFormatInfo.CurrentInfo.MonthNames.ToList();。13 個の要素を取得しList<DateTime>ます (最後に null の月名がありますが、最後の要素はいつでも削除できます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);

他の人が示したように、それを行うには多くの方法があります。

于 2012-10-18T10:50:45.277 に答える