2013-07-05 63 views
1

选择记录我有一个表,如下所示:,最大版本

ConfigID | VersionNo | ObjectType 

和ConfigID来构成VersionNo进行的唯一关键。 我希望能够根据对象类型为每个configID选择最高版本号的记录。

我已经试过

configs = (from config in configRepository.FindBy(x => x.ObjectType.Equals(typeof(Node).ToString(), StringComparison.InvariantCultureIgnoreCase)) 
      group config by config.ConfigID into orderedConfigs 
      select orderedConfigs.OrderBy(x => x.ConfigID).ThenByDescending(x => x.VersionNo).First()); 

编辑:我要补充的是,FindBy基本上是一个where子句。 但我没有得到任何结果。请帮我解决一下这个。

编辑:

在表中的数据可能看起来像:

3fa1e32a-e341-46fd-885d-8f06ad0caf2e | 1 | Sybrin10.Common.DTO.Node 
3fa1e32a-e341-46fd-885d-8f06ad0caf2e | 2 | Sybrin10.Common.DTO.Node 
51d2a6c7-292d-42fc-ae64-acd238d26ccf | 3 | Sybrin10.Common.DTO.Node 
51d2a6c7-292d-42fc-ae64-acd238d26ccf | 4 | Sybrin10.Common.DTO.Node 
8dbf7a33-441f-40bc-b594-e34c5a2c3f51 | 1 | Some Other Type 
91413e73-4997-4643-b7d2-e4c208163c0d | 1 | Some Other Type 

从此我只想要检索的第二和第四的记录,因为他们有对的configId最高版本号和是必需的类型。

+0

你能告诉我一些有关数据的例子吗? – zey

+0

你通过ConfigID分组两次,看我的答案:) – wudzik

回答

2

不知道100%的作品,因为写出VS的:)但想法应该是好的

var configs = configRepository.Where(x=>x.ObjectType==typeof(Node).ToString()); 

var grouped = configs.GroupBy(x=>x.ConfigId); 

var a = grouped.select(x=>x.OrderByDescending(y=>y.VersionNo).First()); 
0

它看起来LINQ到SQL,但在纯SQL我可以写这样的

查询

SELECT ConfigID来,MAX(VersionNo进行)FROM CUSTOMIZE_COLUMNS_DETAIL WHERE 对象类型= '的objectType' GROUP BY ConfigID来

我试图代表在sql中使用场景,可能对你有用,THanks

+1

我们使用OpenAccess与我们的数据库交谈,所以SQL在这里没有帮助。但感谢您的答案。 – Ash