【发布时间】:2012-01-20 22:31:25
【问题描述】:
背景:
实体框架 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 更接近指定的日期。
【问题讨论】:
标签: c# sql-server-2008 entity-framework select