我对亚音速有点新(即评估3.0.0.3)并且在GetPaged(int pageIndex,int pageSize)中遇到了一个奇怪的行为。当我执行该方法时,它执行两次 SQL调用。有什么想法吗?
假设我有一个200行的“Cultures”表。在我的代码中,我做了类似......
的事情var sonicCollection = from c in RTE.Culture.GetPaged(1, 25)
select c;
现在,我希望这会执行一个查询,返回我的culture表中的前25个条目。当我看SQL分析器时,我看到两个查询运行。
首先这个 -
SELECT [dbo].[Cultures].[cultureCode], [dbo].[Cultures].[cultureName]
FROM [dbo].[Cultures]
然后这个 -
SELECT *
FROM (SELECT ROW_NUMBER() OVER (
ORDER BY cultureID ASC) AS Row,
[dbo].[Cultures].[cultureCode], [dbo].[Cultures].[cultureName]
FROM [dbo].[Cultures]
)
AS PagedResults
WHERE Row >= 1 AND Row <= 25
我希望第二个查询可以滚动,因为它是返回我礼貌要求亚音速的25行的那个。但是,第一个查询似乎返回200行(至少根据SQL分析器)。
任何想法发生了什么?
答案 0 :(得分:1)
您只想使用RTE.Culture.GetPaged() - 它会为您运行分页查询。
答案 1 :(得分:1)
这是代码中的错误。代码实际上查询每个记录,然后迭代每个记录以进行计数。我在这里的github repo中创建了一个问题: https://github.com/subsonic/SubSonic-3.0/issues/259
您可以下载源代码,修复问题并轻松重新编译。我已经完成了这个并解决了我的问题。