gpt4 book ai didi

linq - 在 Linq2SQL 中,如何在单个查询中获取记录以及序列中的前一个和下一个?

转载 作者:行者123 更新时间:2023-12-01 09:37:44 25 4
gpt4 key购买 nike

给定一个日期,查询该日期之前的最后一条记录、等于该日期的任何记录以及该日期之后的下一条记录的最有效方法是什么。

它应该在功能上等同于这样的查询:

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()
}

按原样,此查询运行三个查询,并且大概必须按 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);

这应该在数据库中查询一次与所需 Assets ID 关联的订单,按日期对它们进行排序,然后将它们作为数组返回到内存中。由于这是在内存中,现在查找指定日期的当前、上一个和下一个记录的速度非常快。

关于linq - 在 Linq2SQL 中,如何在单个查询中获取记录以及序列中的前一个和下一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4785114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com