2010-08-19 4 views
0

intHi,LINQ to SQL, obtenir les enregistrements les plus récents pour ID donné

Pretty new to LINQ.

J'ai une table d'évaluation.
Un utilisateur ajoute un ensemble de classements pour une entité Il peut y avoir plusieurs jeux de classification pour une entité par utilisateur. Par exemple, supposons que l'entité est une voiture. Par exemple, disons que l'entité est une voiture. La voiture est évaluée sur Apparence et performance. Et un utilisateur peut évaluer l'apparence et la performance de la voiture donnée plus d'une fois. Donc, ma table ressemble à quelque chose comme ceci (le champ de notation ne constitue pas une colonne d'identité, il est un entier sur une échelle de 1 - 10):

ReviewID  UserID  EntityID  CatID  Rating Body    DateSubmitted 
1   3   6   1   7   "drives great"  8/01/2010 02:36:28 PM 
2   3   6   2   8   "looks great"  8/01/2010 02:36:28 PM 
3   3   6   1   2   "broke down"  8/18/2010 11:39:58 PM 
4   3   6   2   1   "paint flaked off" 8/18/2010 11:39:58 PM 

Maintenant, j'ai une méthode d'aide où je fournir l'ID utilisateur et EntityID et je veux retourner l'ensemble le plus récent de Ratings (dans un ViewModel qui inclut la catégorie de notation).

public static IQueryable<RatingViewModel> GetRatingViewModel(int EntityID, int UserID) 
    { 
     DB _db = new DB(); 

     var a = 

      from rating in _db.Ratings 
      join ratingCat in _db.RatingCategories 
       on rating.RatingCategoryID equals ratingCat.RatingCategoryID 
      where rating.UserID == UserID 
       && rating.EntityID == EntityID 
      select new RatingViewModel 
      { 
       Rater = rating.User, 
       RaterRating = rating, 
       RatingCategory = ratingCat 

      }; 

     return a; 
    } 

Quel genre de « où » ou « groupe par » ou « commande par » dois-je ajouter à saisir uniquement le jeu le plus récent des évaluations pour l'ID utilisateur donné et EntityID?

Merci!

Répondre

0

Envisager de commander par le DateSubmitted sur le retour de la méthode, puis en prenant le nombre d'entrées que vous souhaitez.

var a = from rating in _db.Ratings 
     join ratingCat in _db.RatingCategories 
      on rating.RatingCategoryID equals ratingCat.RatingCategoryID 
     where rating.UserID == UserID 
      && rating.EntityID == EntityID 
     orderby rating.DateSubmitted descending 

     select new RatingViewModel 
     { 
      Rater = rating.User, 
      RaterRating = rating, 
      RatingCategory = ratingCat 

     } 
     .Take(10); 
+0

Cela fonctionne, sorta. Si j'ajoute le .Take (10) comme vous l'avez écrit, une erreur se produit lorsque j'indique que mon modèle de vue ne contient pas de définition de 'Take'. Cependant, je peux laisser le '.Take (10)' et ensuite écrire simplement var b = a.Take (10); et ça fait le travail. – johnnycakes

0
.OrderByDescending(a => a.DateSubmitted).FirstOrDefault() 
Questions connexes