2009-10-19 9 views
0

J'essaye d'écrire une Linq to SQL qui me ramènera une liste de lignes contenant une seule instance de BaseQuestionIDs mais je veux la ligne avec la version la plus haute, donc , à partir du tableau suivant des données:LINQ to SQL - sélection d'une liste des numéros de version les plus élevés

Id CreatedDate     Version BaseQuestionID 
2 2009-10-07 13:47:27.687   1  2 
3 2009-10-07 13:49:35.010   1  3 
4 2009-10-09 16:03:45.973   1  5 
5 2009-10-16 16:01:33.603   2  5 
6 2009-10-16 16:16:22.680   1  6 
7 2009-10-16 16:16:53.807   2  6 
8 2009-10-16 16:41:31.180   3  6 
9 2009-10-19 08:06:23.210   4  6 

Je veux revenir:

Id CreatedDate     Version BaseQuestionID 
2 2009-10-07 13:47:27.687   1  2 
3 2009-10-07 13:49:35.010   1  3 
5 2009-10-16 16:01:33.603   2  5 
9 2009-10-19 08:06:23.210   4  6 

J'ai essayé une variété de choses, mais ne l'ai pas cloués encore. Je travaille sur vb.net, mais je suis heureux d'essayer de traduire à partir de C# si c'est ce que vous savez ... Tout pointeur serait grandement apprécié.

Répondre

3

Que diriez-vous (C#):

from q in dc.Questions 
group q by q.BaseQuestionID into grouped 
select grouped.OrderByDescending(q => q.Version).First() 

Vous formez donc essentiellement des groupes de lignes par question ID:

Id CreatedDate     Version BaseQuestionID 
2 2009-10-07 13:47:27.687    1   2 

3 2009-10-07 13:49:35.010    1   3 

4 2009-10-09 16:03:45.973    1   5 
5 2009-10-16 16:01:33.603    2   5 

6 2009-10-16 16:16:22.680    1   6 
7 2009-10-16 16:16:53.807    2   6 
8 2009-10-16 16:41:31.180    3   6 
9 2009-10-19 08:06:23.210    4   6 

(chaque bloc est un "groupé rangée"), puis commander chaque groupe par la version descendante, ne prenant que la première ligne:

Id CreatedDate     Version BaseQuestionID 
2 2009-10-07 13:47:27.687    1   2 
3 2009-10-07 13:49:35.010    1   3 
5 2009-10-16 16:01:33.603    2   5 
9 2009-10-19 08:06:23.210    4   6 

Je voudrais espoir qui obtiendra une traduction sensible en SQL, mais je ne voudrais pas dire à coup sûr :)