2010-12-10 10 views
0

J'ai une table de base de données (appelée Info) qui stocke [Data], [fkID], [UserID], [Timestamp]. [Data] est en réalité plusieurs colonnes, mais cela n'a pas vraiment d'importance.C# Groupby Distinct

Essentiellement, un utilisateur peut aller et entrer des données dans un formulaire, et le formulaire insère une nouvelle ligne dans Info. Ce que je veux être en mesure de faire est de sélectionner l'élément [Data] le plus récent de chaque [UserID] pour un [fkID] spécifique. Cela peut être fait dans LINQ, je ne l'ai pas compris. Voici ce que j'ai jusqu'à présent:

var q = (from i in db.Info 
     where i.fkID == @paramID 
     orderby Timestamp descending 
     groupby new {i.UserID}) 
     .Distinct() 

Cela ne fonctionne évidemment pas. Il renvoie le bon UserID mais pas la partie [Data] que je veux réellement.

En mots, voici ce que je veux faire:

Pour chaque entrée dans Info avec un certain fkID, je veux choisir la dernière ligne de chaque utilisateur.

Je voudrais savoir comment faire cela dans LINQ.

Répondre

3

Vous devez sélectionner la première ligne de chaque groupe, comme celui-ci:

var q = from i in db.Info 
     where i.fkID == @paramID 
     group i by i.UserID into g 
     select new { 
      UserID = g.Key, 
      Recent = g.OrderByDescending(i => i.Timestamp).First() 
     }; 
+0

Cela semble juste. Je ne l'ai pas encore testé, mais je suppose que cela fonctionne. Quand je le testerai, je marquerai le tien correct. Merci. – Shawn

0

Vous devez utiliser .First() au lieu de .Distinct()