【发布时间】:2016-06-10 22:19:45
【问题描述】:
我有一个与此条目类似的问题:
how-do-i-query-sql-for-a-latest-record-date-for-each-user
...但我在 Linq 中需要它。
对于那些不想阅读其他链接的人来说,简而言之:
我有一个包含设备的历史记录表。在给定日期之前,我需要每个设备的最新条目。所以我不需要一个特定的值,而是整行。
示例数据:
ID | DeviceId | State | LastUpdatedDate
0 | 1 | Online | 2016-01-05 10:23:45
1 | 2 | Offline | 2016-01-04 00:05:33
2 | 1 | Offline | 2016-01-01 06:13:25
3 | 1 | Online | 2016-01-07 11:02:06
4 | 3 | Offline | 2016-01-03 18:00:25
5 | 4 | Online | 2016-01-08 03:00:05
4 | 3 | Offline | 2016-01-08 04:27:21
所以,如果我想知道 2016-01-05 之前的最后一个已知状态,我希望得到以下结果:
ID | DeviceId | State | LastUpdatedDate
1 | 2 | Offline | 2016-01-04 00:05:33
2 | 1 | Offline | 2016-01-01 06:13:25
4 | 3 | Offline | 2016-01-03 18:00:25
NULL | 4 | NULL | NULL
NULL 条目不是必需的,我只是为了清楚起见添加了它。同样,我在 Linq 中需要这个。我可以通过代码中的 foreach 轻松做到这一点,但我不想对数据库进行 700 次调用。我希望这相当有效。
谢谢!
【问题讨论】:
-
到目前为止你尝试过什么?此外,我不能 100% 确定,但我认为 LINQ 会使用某种循环机制——它只会在代码中看起来更简洁。
-
我确实让它在 SQL 中工作,可能效率不高,但工作。但我不知道如何将它翻译成 linq。我的sql如下:
select * from DeviceHistory as dh right join (select (select top 1 Id from DeviceHistory where DeviceId = s.Id and LastUpdate <= '2016-06-11 00:00:00' order by LastUpdate desc) as HistoryId from Devices as s) as dhId on dh.Id = dhId.HistoryId where not Id is null order by LastUpdate desc
标签: c# sql sql-server linq