Kor*_*tak 6 c# select entity-framework sql-server-2008
背景:
实体框架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
Run Code Online (Sandbox Code Playgroud)
并选择一个日期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();
Run Code Online (Sandbox Code Playgroud)
这与我正在尝试的最接近.但是,我不确定Last运算符在转换为SQL时是如何工作的,如果它完全被翻译的话.
题:
此查询是获取所有数据(早于userTime),然后获取最后一个元素,还是将其翻译,以便只从数据库返回一个元素?我的表可以容纳非常多的行(100000+),因此性能是一个问题.
另外,如何检索数据库中最接近的时间(不一定是更早的时间)?在一个例子中2010-07-22,人们会得到2010-11-02,因为它更接近指定的日期2009-09-24.
Jon*_*eet 13
通常,如果您担心LINQ的行为方式,您应该检查SQL 会发生什么.如果您还没有弄清楚如何查看LINQ查询如何转换为SQL,那么这应该是您接下来要做的事情.
正如您在评论中指出的那样,Last()LINQ to SQL不支持,因此EF也可能如此.幸运的是,它很容易使用First():
var query = (from oData in db.OrderDatas
where oData.Timestamp <= userTime
orderby oData.Timestamp descending
select oData).First();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19221 次 |
| 最近记录: |