【发布时间】:2020-08-03 11:56:57
【问题描述】:
我在将我的 SQL 转换为 LINQ 时遇到了麻烦,以便按预期处理结果......
考虑下表:
pkIdentifier fkProject fkFirst fkSecond 日期 1 1030 1 1 03.08.2020 10:05:00 2 1030 1 2 03.08.2020 10:11:00 3 1030 3 1 03.08.2020 14:00:00 4 1030 3 2 03.08.2020 14:02:00 5 1040 1 1 03.08.2020 15:00:00 6 1050 2 1 04.08.2020 08:00:00 7 1050 2 2 04.08.2020 08:10:00 8 1050 2 3 04.08.2020 08:15:00我需要在这里找到具有最大“fkSecond”的项目 - 如果有更多条目,则找到日期最年轻的那个。
也就是说,上表的结果是:
pkIdentifier fkProject fkFirst fkSecond 日期 2 1030 1 2 03.08.2020 10:11:00 5 1040 1 1 03.08.2020 15:00:00 8 1050 2 3 04.08.2020 08:15:00使用下面的 SQL,结果几乎与我预期的相同:
选择 ps.fkProject、ps.fkFirst、ps.fkSecond、min(ps.Date) 作为日期 FROM 项目状态 ps 内部联接 ( 选择 a.fkProject, MAX(a.fkSecond) 作为 maxSecond FROM 项目状态 按 a.fkProject 分组 ) b ON ps.fkProject = b.fkProject 和 ps.fkSecond = b.maxSecond 按 ps.fkProject、ps.First、ps.Second 分组我在 LINQ 上的尝试,但如果有更多具有相同“fkSecond”的条目,则仅选择日期最年轻的条目:
var query = this.dataContext.ProjectStatus.Where( x => x.fkSecond == this.dataContext.ProjectStatus.Where(y => y.fkProject == x.fkProject).Max(s => s.fkSecond) );我目前还在为 Project 1030 获得 fkSecond=2 的第二行,但这不是我想要的。我只想要日期最年轻的那个,它是 pkIdentifier 2。
pkIdentifier fkProject fkFirst fkSecond 日期 2 1030 1 2 03.08.2020 10:11:00 4 1030 3 2 03.08.2020 14:02:00 5 1040 1 1 03.08.2020 15:00:00 8 1050 2 3 04.08.2020 08:15:00【问题讨论】: