我想用每个10秒或更长的时间间隔的日期时间查询每个结果。有没有一种方法可以让我在单个查询中使用Linq或Expression查询,而不必遍历所有结果来执行间隔。
ShipPosition模型设计
- Id (int)
- MMSI (int)
- Latitude (decimal)
- Longitude (decimal)
- LocalRecvTime (datetime)
我仍然坚持要怎么做。
dbContext.ShipPositions.Where(c => c.MMSI == m.MMSI &&
c.LocalRecvTime >= m.FromDateTime && c.LocalRecvTime < m.ToDateTime)
我希望结果应该是这样,第2行和第1行的差应为10秒或更多
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" rel="stylesheet"/>
<table class="table table-hover table-bordered table-striped table-condensed">
<thead>
<th>
MMSI
</th>
<th>
Date Time
</th>
</thead>
<tbody>
<tr>
<td>123</td>
<td>14:10:23</td>
</tr>
<tr>
<td>123</td>
<td>14:10:33</td>
</tr>
<tr>
<td>123</td>
<td>14:10:46</td>
</tr>
</tbody>
</table>
答案 0 :(得分:0)
给予
var src = dbContext.ShipPositions.Where(c => c.MMSI == m.MMSI &&
c.LocalRecvTime >= m.FromDateTime && c.LocalRecvTime < m.ToDateTime);
您可以找到上一行,然后按以下方式比较时间:
var ans = from sp in src
let prev = src.Where(s => s.LocalRecvTime < sp.LocalRecvTime).OrderByDescending(s => s.LocalRecvTime).First().LocalRecvTime
where prev == null || EF.Functions.DateDiffSecond(prev, sp.LocalRecvTime) >= 10
select sp;
理想情况下,prev
的定义应使用<=
和主键来防止返回同一行,但是您没有提供该信息。
请注意,如果要测试的行数很多,这可能会成倍地缓慢。在这种情况下,最好返回行并在客户端进行处理,或者使用带有ROWNUMBER
的SQL存储过程。