Справочная информация:
Entity Framework 4 с SQL Server 2008
Проблема:
У меня есть таблица Order
.В каждой строке есть столбец Timestamp
.
Пользователь может выбрать некоторое время в прошлом, и мне нужно получить Order
, ближайший к указанному времени, но это произошло до указанного времени.Другими словами, последний заказ до указанного времени.
Например, если у меня есть заказы
2008-01-12
2009-04-17
2009-09-24
2010-11-02
2010-12-01
2011-05-16
и я выберу дату 2010-07-22
, я должен получить 2009-09-24 order
,потому что это последний заказ до указанной даты.
var query = (from oData in db.OrderDatas
where oData.Timestamp <= userTime
orderby oData.Timestamp ascending
select oData).Last();
Это наиболее близко к тому, что я пытаюсь.Однако я не уверен, как именно работает оператор Last при переводе в SQL, если он вообще переведен.
Вопрос:
Получит ли этот запрос все данные (ранее userTime
), а затем возьмет последний элемент или будет переведен так, чтобы только один элементбудет возвращен из базы данных?Моя таблица может содержать очень большое количество строк (100000+), поэтому здесь важна производительность.
Кроме того, как можно получить самое близкое время в базе данных (не обязательно раньше)?В примере 2010-07-22
можно получить 2010-11-02
, поскольку оно ближе к указанной дате, чем 2009-09-24
.