С# Разделить список в подсписках на основе значения определенного свойства?
У меня есть список событий, каждый из которых имеет свойство datetime. Мне нужно разделить список на подсписок по годам. Фокус в том, что мой список событий вытаскивается из базы данных и может быть изменен, поэтому я не могу просто указать количество лет и отсортировать события в нужном году. Есть ли способ, чтобы я мог разделить мой основной список событий на подсписки, чтобы в каждом подсписке каждое событие имело тот же год? Таким образом, я получаю подсписок всех событий 2010 года, подсписку всех событий 2011 года и так далее.
Мой список создается следующим образом:
foreach (var ev in eventResults)
{
eventsList.Add(new Event()
{
Name = ev.Title,
Month = CultureInfo.CurrentCulture.DateTimeFormat.GetAbbreviatedMonthName(ev.StartDate.Month),
Day = ev.StartDate.Day,
Year = ev.StartDate.Year
});
}
Ответы
Ответ 1
Вы должны сделать группировку по годам следующим образом:
eventsList.GroupBy(x => x.Year)
Так что позже вы сможете перебрать результат кода выше:
foreach (var eventsInYear in eventsList.GroupBy(x => x.Year))
{
// eventsInYear.Key - year
// eventsInYear - collection of events in that year
}
Ответ 2
Использовать GroupBy:
var eventsByYear = eventsList.GroupBy(a => a.Year);
Затем вы можете перебирать эту коллекцию для обработки каждый год:
foreach (var yearEvents in eventsByYear)
{
// yearEvents contains all the events for one particular year
Console.WriteLine("Events for year: " + yearEvents.Key);
foreach (var e in yearEvents)
{
Console.WriteLine(e);
}
}