2014-10-15 16 views
7

Mam listę zdarzeń, z których każda ma właściwość datetime. Muszę podzielić listę na podlisty według roku. Sztuczka polega na tym, że moja lista zdarzeń jest pobierana z bazy danych i podlega zmianom, więc nie mogę po prostu zakodować zestawu lat i uporządkować wydarzeń w odpowiednim roku. Czy istnieje sposób, że mogę podzielić moją główną listę wydarzeń na podlisty, aby w ramach każdej podlisty każde wydarzenie miało ten sam rok? W efekcie otrzymam podlistę wszystkich wydarzeń z 2010 r., Podlistę wszystkich wydarzeń z 2011 r. I tak dalej.C# Podział listy na podlisty na podstawie wartości określonej właściwości?

Moja lista jest tworzona tak:

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

GroupBy jest to, czego szukasz: http://stackoverflow.com/questions/7325278/group-by-in -linq –

Odpowiedz

23

Trzeba zrobić grouping by roku tak:

eventsList.GroupBy(x => x.Year) 

tak późno będzie można wykonać iterację wyniku kodu powyżej:

foreach (var eventsInYear in eventsList.GroupBy(x => x.Year)) 
{ 
    //eventsInYear.Key - year 
    //eventsInYear - collection of events in that year 
} 
4

Użyj GroupBy:

var eventsByYear = eventsList.GroupBy(a => a.Year); 

Następnie można wykonać iterację tej kolekcji przetwarzać rocznie:

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

Wydarzenie btw jest słowem kluczowym i nie można go używać od razu, powinno być @ event – Vladimirs

+0

@ Vladimirs: Good catch. –

Powiązane problemy