2009-10-19 28 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,但我不想肯定地说:)