【发布时间】:2019-01-29 13:12:24
【问题描述】:
我的表格包含有关time 和一些data 的信息。预期结果是在两行之间显示interval(以秒为单位),并显示data。
MyTable(来源):
------------------------------
| Time | Data |
------------------------------
| 23.8.2018 14:00:00 | abc |
| 23.8.2018 14:00:02 | def |
| 23.8.2018 14:00:05 | ghi |
| 23.8.2018 14:00:06 | jkl |
------------------------------
预期结果:
-------------------
| interval| result|
-------------------
| 2 | abc |
| 3 | def |
| 1 | ghi |
| NULL | jkl | --optional result / might not exist
-------------------
我想到的可能解决方案:
我的结论是可以通过JOIN 或ZIP 在 LINQ/SQL 中获得结果。如发现的那样,ZIP 不受 Linq to Entities 的支持,但应该在局部变量中工作。
类似:
var lTmp = lData.Zip(lData.Skip(1), (a, b) => new
{
interval = (b.Time - a.Time).Seconds,
result = a.Value
}).ToList();
想到JOIN,我来到了“解决方案”,我可以在下一行加入同一个表,但我不知道应该如何用 LINQ 编写它。考虑到 ID,我可以加入比前一个大 (+1) 的 ID,但可能会丢失某些行,这些行必须按 Time(不是 ID)排序。
最后但并非最不重要的一点是,直接在 SQL 中我可以编写如下内容:
SELECT
DATEDIFF(MILLISECOND,
[Time],
LEAD([Time], 1, null) OVER (ORDER BY [Time])) AS interval,
result
FROM
Data
问题:
是否可以在 LINQ(Linq to Entities)中编写这样的查询以及如何编写?还是我需要把它放在存储过程/普通 SQL 查询中?
【问题讨论】:
标签: c# sql-server entity-framework linq linq-to-sql