0

我有一个包含数千条记录的表,其主键名为 Id。

随着时间的推移,记录已被删除,因此 Id 结构如下所示:

ID 1,2,5,7,12,15,17,34,45,89,97 ~ 到 2567,2743,2981 等

使用 c# 和实体框架,有没有办法找到一个特定的 Id 并通过查询检索它以及它周围的下一个和前十个记录?

我想我正在尝试捕获一个记录窗口。在 100 个项目的完美列表中,假设我需要记录 60,是否有可以检索记录 50-70 的查询?

4

1 回答 1

1

在正常情况下,您不应该关心 Id,因为它们是自动的,并不意味着没有间隙(如果您想做类似的事情)。

不过,您可以使用以下查询选择您的条目:

SELECT TOP 11 Id FROM Table WHERE ID >= 400 ORDER BY ID UNION
SELECT TOP 11 Id From Table WHERE ID <= 400 ORDER BY ID Desc

或者,您可以查看 SQL 的 RANGE 函数,它允许对行进行数字化,然后根据该数字进行选择

以及 Select-Union 的 EF 版本:

idList.Where(id >= 400).OrderBy(id => id).Take(11).Union(
    idList.Where(id <= 400).OrderByDescending(id => id).Take(11));
于 2013-07-31T12:51:04.303 回答