2010-08-23 2 views
0

Celui-ci devrait être facile.LINQ to SQL le plus récent ensemble d'enregistrements pour un ID donné?

J'ai une table de commentaires avec des enregistrements. Les colonnes sont EntityID, UserID, Body, DateModified. Un utilisateur peut soumettre plusieurs entrées pour une entité. Je veux sélectionner tous les avis qui sont les entrées les plus récentes pour une entité donnée par ID utilisateur.

Donc, la table pourrait ressembler à ceci:

EntityID  UserID  Body  DateModified 
1   101  "hey" 8/22/2010 11:36:47 PM 
1   101  "dude" 8/11/2010 04:15:43 PM 
1   108  "brah" 8/21/2010 11:31:11 PM 
1   108  "sup?" 8/14/2010 10:00:00 PM 

J'ai quelque chose comme ceci:

var itemReviews = db.Reviews 
          .Where(x => x.EntityID == EntityID) 
          .OrderByDescending(x => x.DateSubmitted) 
          ; 

Que dois-je ajouter pour obtenir uniquement les enregistrements pour les plus récents EntityID ?

Merci.

+0

Vous pouvez regarder http://msdn.microsoft.com/en-us/vcsharp/aa336746 .aspx pour en savoir plus sur les différents opérateurs LINQ. –

Répondre

3

Afin d'obtenir le single Dernier avis déposé:

var mostRecentReview = db.Reviews 
         .Where(x => x.EntityID == EntityID) 
         .OrderByDescending(x => x.DateSubmitted) 
         .First(); 

Afin d'obtenir la révision la plus récente pour chaque utilisateur:

var reviews = db.Reviews 
       .Where(x => x.EntityID == EntityID) 
       .GroupBy(x => x.UserID) 
       .Select(gr => new { 
        UserID = gr.Key, 
        MostRecentReview = gr.OrderByDescending(x => x.DateSubmitted) 
             .First() 
       }); 
+0

Vous pouvez utiliser FirstOrDefault() au lieu de First() si vous n'êtes pas sûr d'avoir des éléments dans le jeu de résultats, alors vous obtenez null au lieu d'une exception quand aucun élément ne correspond à la condition. –

+0

La deuxième partie l'a eu. Je vous remercie! – johnnycakes

-1

Si vous voulez un ensemble d'articles retournés (sql top/limite) vous pouvez utiliser Take

var itemReviews = db.Reviews 
        .Where(x => x.EntityID == EntityID) 
        .OrderByDescending(x => x.DateSubmitted) 
        .Take(4); 

Si vous souhaitez également faire une recherche de personnes vous pouvez utiliser Skip

var itemReviews = db.Reviews 
        .Where(x => x.EntityID == EntityID) 
        .OrderByDescending(x => x.DateSubmitted) 
        .Skip(pageNo *pageSize).Take(pageSize); 
+0

Downvote? Y a-t-il une explication pour que je puisse apprendre de mes erreurs? –

-1

beaucoup comme vous pouvez utiliser, l'un des moyens est:

var mostRecentReview = db.Reviews 
        .Where(x => x.EntityID == EntityID).Max(x =>x.DateModified);