gpt4 book ai didi

linq - 在存储过程上使用 LINQ 进行分页?

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

有没有一种方法可以使用类似以下代码的方式对数据进行分页,而无需将整个数据集加载到程序中?

var r = from c in entities.GetSearchData(null,"en",null,true) select c;
IPagedList<Models.SearchResult> results = r.ToPagedList<Models.SearchResult>(1, 10);

我正在尝试使用带有 LINQ 的存储过程来获取分页结果。 (顺便说一句,上面的代码给出了“查询的结果不能被枚举多次。”错误)。可能吗?

最佳答案

目前无法使用 Entity Framework 进行测试,但常规 LINQ-to-SQL 允许以下语句:

var rpage1 = entities.GetSearchData(null,"en",null,true).Skip(0).Take(10)
var rpage2 = entities.GetSearchData(null,"en",null,true).Skip(10).Take(10)
var rlist = rpage1.ToList();

LINQ 将生成一个类似的子句

WHERE [t1].[ROW_NUMBER] BETWEEN @p0 + 1 AND @p0 + @p1

在我的例子中,结果查询是(GetConstantsValues 是一个存储过程):

SELECT [t1].[value] AS [Value]
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY [t0].[value]) AS [ROW_NUMBER], [t0].[value]
FROM [dbo].[GetConstantsValues](@p0) AS [t0]
) AS [t1]
WHERE [t1].[ROW_NUMBER] BETWEEN @p1 + 1 AND @p1 + @p2
ORDER BY [t1].[ROW_NUMBER]

因此只有相关结果才会加载到程序中。

我认为,EF 应该与它没有太大区别。可能是错的。

关于linq - 在存储过程上使用 LINQ 进行分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12472834/

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