2010-12-30 6 views
0

Dites que j'ai une base de données avec environ 5000 messages de blog des 2 dernières années, j'essaye de créer des archives 'mensuelles' afin que je puisse afficher les données d'une manière beaucoup plus logique.Archives mensuelles

Pour une raison quelconque, je n'ai jamais vraiment eu à travailler avec les dates et mes connaissances me manquent.

J'utilise Linq/C#; quelqu'un peut-il me diriger dans la bonne direction pour apprendre à faire cela?

Vive

Matt

Répondre

0

Eh bien, ce n'est pas très différent de filtrage basé sur une propriété entière:

DateTime beginDate, endDate; 
// set beginDate and endDate as appropriate, based on the month you are displaying 
// beginDate = new DateTime(2011, 1, 1); 
// endDate = beginDate.AddMonths(1); 
var query = from post in db.Entries 
      where post.Date >= beginDate && post.Date < endDate 
      orderby post.Date descending 
      select post; 
0

Cela dépend vraiment de vos besoins et la façon dont les flux de l'interface utilisateur. Dans la plupart des cas, vous pouvez fournir une plage de dates et rechercher des publications dans cette plage.

Le formatage des messages résultants dépend entièrement de vous, des outils avec lesquels vous devez travailler et de ce dont vous avez besoin. Toutefois, vous pouvez utiliser GroupBy pour regrouper les publications à une certaine date, puis parcourir chaque groupe pour générer des liens individuels. Mon exemple ci-dessous vous montre cela dans une application de console. Vous devriez pouvoir extrapoler comment l'appliquer à vos besoins.

var postsByMonth = (from post in context.Posts 
          where post.Date >= start && post.Date < end 
          orderby post.Date descending 
          select post).GroupBy(post => new DateTime(post.Date.Year, post.Date.Month, 1)); 

      foreach (IGrouping<DateTime, Post> posts in postsByMonth) 
      { 
       Console.WriteLine("{0:MMM} {0:yyyy}", posts.Key); 
       Console.WriteLine("======================"); 
       Console.WriteLine(); 

       foreach (Post post in posts) 
       { 
        Console.WriteLine("Post from {0}", post.Date); 
       } 

       Console.WriteLine(); 
      }