我有一张表格如下:
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的最高版本号并且是所需类型。
答案 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中复制场景,可能对你很有用,谢谢