1

我有一张如下表:

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

4

2 回答 2

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());
于 2013-07-05T10:13:38.303 回答
0

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

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

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

于 2013-07-05T10:25:30.033 回答