由于每个事件都会有你创建的每个用适当的和事件描述的日期,我做了便于显示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