选择最大版本的记录

时间:2013-07-05 10:06:46

标签: c# linq

我有一张表格如下:

ConfigID | VersionNo | ObjectType

ConfigID和VersionNo构成唯一键。 我希望能够根据对象类型为每个configID选择具有最高VersionNo的记录。

我试过了

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的最高版本号并且是所需类型。

2 个答案:

答案 0 :(得分: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());

答案 1 :(得分:0)

看起来LINQ sql但在纯SQL中我可以像这样编写查询

  

SELECT ConfigID,MAX(VersionNo)FROM CUSTOMIZE_COLUMNS_DETAIL WHERE   ObjectType ='objectType'GROUP BY ConfigID

我试图在sql中复制场景,可能对你很有用,谢谢