我有一组具有(除其他外) DateTime 值的实体。我想为所有大于特定日期时间的实体查询数据库(使用实体框架),并从这个日期时间及时获取最接近的值。时间点分布不均,我只想进行一次数据库往返。
例如:[{T = 1},{T = 2},{T = 3},{T = 4}]
所以...如果我在数据库中查询一个时间值大于或等于 T = 3 的实体,我还想取回 T = 2 的值。那是
结果:[{T = 2},{T = 3},{T = 4}]
这可能吗?如果没有,是否可以在 SQL 中使用?
我有一组具有(除其他外) DateTime 值的实体。我想为所有大于特定日期时间的实体查询数据库(使用实体框架),并从这个日期时间及时获取最接近的值。时间点分布不均,我只想进行一次数据库往返。
例如:[{T = 1},{T = 2},{T = 3},{T = 4}]
所以...如果我在数据库中查询一个时间值大于或等于 T = 3 的实体,我还想取回 T = 2 的值。那是
结果:[{T = 2},{T = 3},{T = 4}]
这可能吗?如果没有,是否可以在 SQL 中使用?
这将返回两组
from o in db.Orders
group o by o.T >= value into g
select g.Key ? g.OrderBy(x => x.T) :
g.OrderByDescending(x => x.T).Take(1)
一个组将包含具有的实体,T >= value
而另一组将具有之前的实体(如果有)。
正如@Gert Arnold 正确指出的那样更新,此查询将适用于 Linq to SQL,但不适用于实体框架。而不是分组,您应该使用两个子查询的联合:
db.Orders.Where(o => o.T >= value)
.Union(db.Orders.Where(o => o.T < value)
.OrderByDescending(o => o.T)
.Take(1));