與實體框架目前無法測試,但經常LINQ到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應該沒有多大差別。可能是錯的。
對於不止一次枚舉的錯誤:您可以使用r.ToList()枚舉多次。您也可以使用Linq來使用Take(),Skip()擴展方法來獲取特定的數據集,這樣,如果您願意,您也可以省略使用存儲過程。 – 2012-09-18 08:13:16
但如果我使用ToList()數據將在分頁之前加載。我需要在沒有加載整套的情況下做到這一點。 –
您的存儲過程是否接受分頁參數?分頁必須由存儲過程在內部完成。 –