Учитывая
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
следует использовать <=
, аПервичный ключ, чтобы предотвратить возврат той же строки, но вы не предоставили эту информацию.
Обратите внимание, что это может быть экспоненциально медленным, если нужно протестировать большое количество строк.В этом случае вам лучше вернуть строки и обработать их на стороне клиента или использовать хранимую процедуру SQL с ROWNUMBER
.