Диапазон дат и времени запроса с интервалом

Я хочу запросить диапазон дат и времени с интервалом 10 секунд или более для каждого результата. Есть ли способ сделать запрос с помощью Linq или Expression в одном запросе без необходимости перебирать все результаты, чтобы выполнить интервал.

Дизайн модели корабля

  - 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>

Могут ли быть две одинаковые отметки времени?

NetMage 28.12.2018 21:14

Можете показать полное определение ShipPositions? У него есть первичный ключ?

NetMage 28.12.2018 21:31

@NetMage Нет. Результат не может иметь одинаковые отметки времени, и да, у ShipPosition действительно есть первичный ключ.

hafiz abdullah 29.12.2018 04:10
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
80
1

Ответы 1

Данный

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.

Если я использую первичный ключ, как вы сказали, это по-прежнему влияет на производительность? Потому что он может обрабатывать большое количество строк

hafiz abdullah 29.12.2018 04:13

@hafizabdullah Использование первичного ключа для ограничения подзапроса должно значительно повысить производительность, если первичный ключ упорядочен - могу ли я ожидать, что первичный ключ будет в хронологическом порядке возрастания LocalRecvTime? Я внесу изменение кода.

NetMage 02.01.2019 21:36

Я только что проверил, к сожалению, нет. Первичный не находится в хронологическом порядке возрастания до LocalRecvTime

hafiz abdullah 03.01.2019 10:17

Другие вопросы по теме