3

我有一组具有(除其他外) DateTime 值的实体。我想为所有大于特定日期时间的实体查询数据库(使用实体框架),并从这个日期时间及时获取最接近的值。时间点分布不均,我只想进行一次数据库往返。

例如:[{T = 1},{T = 2},{T = 3},{T = 4}]

所以...如果我在数据库中查询一个时间值大于或等于 T = 3 的实体,我还想取回 T = 2 的值。那是

结果:[{T = 2},{T = 3},{T = 4}]

这可能吗?如果没有,是否可以在 SQL 中使用?

4

1 回答 1

3

这将返回两组

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));
于 2013-06-05T07:25:39.797 回答