2009-10-19 25 views
0

我正在嘗試將一些Linq寫入SQL,這將使我回到包含BaseQuestionIDs的單個實例的行的列表,但我想要最高版本的行從數據如下表:LINQ to SQL - 選擇最高版本號的列表

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 

我要回:

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 

我已經嘗試了各種各樣的事情,但沒有釘呢。我在vb.net工作,但很高興嘗試從c#翻譯,如果這就是你知道的...任何指針將不勝感激。

回答

3

如何(C#):

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

所以基本上你形成由問題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 

(每塊一個 「分組行」),然後訂購每個組通過版本降下來,只取第一行:

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 

我會希望這將得到一個合理的翻譯成SQL,但我不想肯定地說:)