由於每個事件都會有你創建的每個用適當的和事件描述的日期,我做了便於顯示calendarevent類和月份枚舉:
public enum NameOfMonth
{
january = 1,
febuary,
march,
april,
may,
june,
july,
august,
september,
october,
november,
december
}
class CalendarEvent
{
public NameOfMonth month;
public DateTime date { get; set; }
public string eventdescription { get; set; }
public CalendarEvent()
{
}
}
然後創建與每個calendarevent對象名單(每一個當然有一個描述,日期,等等......),然後按年創建一個匿名對象並按月排序,然後按天顯示它們:
List<CalendarEvent> myevents = new List<CalendarEvent>()
{
new CalendarEvent(){date = new DateTime(2005,1,17),eventdescription = "Armaggedon",month = NameOfMonth.january},
new CalendarEvent(){date = new DateTime(2005,3,20),eventdescription = "Apocalypse",month = NameOfMonth.march},
new CalendarEvent(){date = new DateTime(2007,5,20),eventdescription = "WorldPeace",month = NameOfMonth.may},
new CalendarEvent(){date = new DateTime(2009,2,20),eventdescription = "LaundryDay",month = NameOfMonth.febuary},
new CalendarEvent(){date = new DateTime(2009,4,15),eventdescription = "MentalHealth",month = NameOfMonth.april},
new CalendarEvent(){date = new DateTime(2009,6,10),eventdescription = "ProgrammingInC#",month = NameOfMonth.june},
new CalendarEvent(){date = new DateTime(2009,6,12),eventdescription = "EraseAllYourWork?",month = NameOfMonth.june},
new CalendarEvent(){date = new DateTime(2010,10,20),eventdescription = "SomeVeryNiceEvent",month = NameOfMonth.october},
new CalendarEvent(){date = new DateTime(2010,8,21),eventdescription = "WellAnotherEvent",month = NameOfMonth.august}
};
var result = myevents2.GroupBy(d => d.date.Year)
.Select(g => new { Year = g.Key, data = g.OrderByDescending(k => k.date.Month).ThenByDescending(day => day.date.Day) })
.ToList();
foreach (var item in result)
{
Console.WriteLine("Events on ***" + item.Year + "***");
foreach (var subitems in item.data)
{
Console.WriteLine(subitems.month.ToString());
Console.WriteLine("On day " + subitems.date.Day + " - " + subitems.eventdescription);
}
}
請定義「更好」可以回答這個問題。請注意,您目前的方法明顯處於「壞」的一面,因爲您似乎正在使用字符串作爲數字數據(年份通常是「int」,而不是「字符串」)。 –
這完全取決於你將如何使用這些對象。您可以將它們放在一個直式列表中,並在需要時隨時用LINQ進行分組/排序。不知道你的使用模式是什麼,這個問題不是很有意義。 – Jon
我與Jon共享相同的想法,列表或類似可能已足夠用LINQ的orderby等 –
Sayse