我有一个包含数千个记录的表,其中包含一个名为Id的主键。
随着时间的推移,记录已被删除,因此Id结构如下所示:
Ids 1,2,5,7,12,15,17,34,45,89,97~2567,2743,2981等
使用c#和Entity Framework,有没有办法找到一个特定的ID并使用查询检索它以及它周围的下一个和前十个记录?
我想我正试图抓住一个记录窗口。在100个项目的完美列表中,让我说我需要记录60,是否有查询将检索记录50-70?
答案 0 :(得分: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));