Sco*_*ord 3 linq performance linq-to-sql
给定一个日期,在该日期之前查询最后一条记录的最有效方法是什么,任何等于该日期的记录,以及该日期之后的下一条记录.
它应该在功能上等同于这样的查询:
from asset in Assets
where asset.Id == assetId
select new {
Previous = (from a in a.Orders where a.Date < myDate orderby a.Date descending select a).FirstOrDefault(),
Current = (from a in a.Orders where a.Date == myDate select a).SingleOrDefault(),
Next = (from a in a.Orders where a.Date > myDate orderby a.Date select a).FirstOrDefault()
}
Run Code Online (Sandbox Code Playgroud)
这样,这个查询运行三个查询,并且可能需要通过myDate对数据集进行三次排序才能完成.
一些类似的问题:
提供"最有效"的查询取决于您的高效含义.
如果您想要对数据库进行单个查询,按日期进行单一类别的订单,最后按日期进行快速查询,那么我建议以下可能是最有效的.:-)
var orders =
(from a in Assets
where a.Id == assetId
from o in a.Orders
orderby o.Date
select o).ToArray();
var previous = orders.LastOrDefault(o => o.Date < myDate);
var current = orders.SingleOrDefault(o => o.Date == myDate);
var next = orders.FirstOrDefault(o => o.Date > myDate);
Run Code Online (Sandbox Code Playgroud)
这应该查询数据库一次以查找与所需资产Id关联的订单,按日期对它们进行排序,并将它们作为数组返回到内存中.由于这是在内存中,现在查找指定日期的当前,上一个和下一个记录的速度非常快.
| 归档时间: |
|
| 查看次数: |
3803 次 |
| 最近记录: |