2009-09-30 7 views
6

Ho una tabella di database che rappresenta Eventi. La tabella ha 2 campi principali EventDate e EventTitle.Come faccio a raggruppare per Eventi per anno utilizzando una singola query LINQ?

Sto provando a raggruppare gli eventi per anno da visualizzare all'utente. Sto cercando di utilizzare una query Linq per tirare gli anni distinti che hanno eventi e per ogni anno ci dovrebbe essere una lista di eventi in quell'anno. Quindi ogni record nell'elenco avrebbe un anno e un elenco di eventi

Suppongo che questo possa essere fatto con una query su linq ma la mia conoscenza di linq è basilare. Finora ho solo ottenuto gli anni distinti in una lista con questa query:

var yearsList = (from e in Events 
       select e.EventDate.Year).Distinct(); 

Come faccio ad aggiungere un elenco di eventi per ogni record anno?

+0

ho dovuto rimuovere l'immagine dal tuo post perchè ImageShack ha cancellato e li ha sostituiti con la pubblicità. Vedere http://meta.stackexchange.com/q/263771/215468 per ulteriori informazioni. Se possibile, sarebbe bello caricarli di nuovo. Grazie! – Undo

risposta

8
var yearsList = from e in Events 
       group e by e.EventDate.Year into g 
       select new { Year = g.Key, Events = g }; 

Ciò consente di ottenere un elenco di oggetti con una proprietà "Anno" e una proprietà "Eventi" (tutti gli eventi per quell'anno).

Dai un'occhiata a questo utile riferimento: 101 Linq Samples.

+0

Grazie! Abbastanza semplice. – orandov

7

Stai davvero cercando un gruppo ordinato.

var yearsList = from e in Events 
       group e by e.EventDate.Year into g 
       orderby g.Key 
       select g; 

foreach(var yearGroup in yearsList) 
{ 
    int year = yearGroup.Key; 
    foreach(Event e in yearGroup) 
    { 
     // do something with the events 
    } 
} 
+0

Grazie per la risposta. – orandov

1

Supponendo di avere la seguente classe Event

public class Event 
    { 
      public int Year { get; set; } 
      public string Name { get; set; } 
      public static Event[] GetEvents() 
      { 
       return new Event[]   
       { 
       new Event{ Name="Event1", Year=2001}, 
       new Event{ Name="Event2", Year=2002}, 
       new Event{ Name="Event3", Year=2003}, 

       new Event{ Name="Event4", Year=2001}, 
       new Event{ Name="Event5", Year=2002}, 
       new Event{ Name="Event6", Year=2003}, 

       new Event{ Name="Event7", Year=2001}, 
       new Event{ Name="Event8", Year=2002}, 
       new Event{ Name="Event9", Year=2003} 
      }; 

     } 
} 

public class Program 
    { 
     static void Main(string[] args) 
     { 

      var groupedEvents = Event.GetEvents().GroupBy(e => e.Year); 

      foreach (var groupedEvent in groupedEvents) 
      { 
       Console.WriteLine("Year:{0}",groupedEvent.Key); 
       foreach (var evnt in groupedEvent) 
       { 
        Console.WriteLine("---- Event Name:{0}",evnt.Name); 
       } 
     } 


    } 
} 

È possibile che questo dovrebbe darvi eventi raggruppati per anno

Problemi correlati