2012-09-18 2 views
4

프로그램에 전체 데이터 집합을로드하지 않고 데이터에 페이지 매기기를 사용하려면 다음 코드를 사용할 수 있습니까?저장 프로 시저에서 LINQ로 페이지 매김?

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

페이징 된 결과를 얻으려면 LINQ가있는 저장 프로 시저를 사용하려고합니다. (BTW 위의 코드는 "쿼리 결과를 두 번 이상 열거 할 수 없습니다."오류). 가능한가?

+0

오류가 두 번 이상 열거 된 경우 : r.ToList()를 두 번 이상 열거 할 수 있습니다. 또한 Linq를 사용하여 Take(), Skip() 확장 메소드를 사용하여 특정 데이터 세트를 가져올 수도 있습니다. 이렇게하면 원하는 경우 저장 프로 시저의 사용을 생략 할 수도 있습니다. –

+0

하지만 ToList()를 사용하면 데이터가 페이지 매기기 전에로드됩니다. 전체 세트를로드하지 않고이 작업을 수행해야합니다. –

+4

저장 프로 시저가 페이징 매개 변수를 허용합니까? 페이징은 저장 프로 시저에 의해 내부적으로 수행되어야합니다. –

답변

2
순간에 엔티티 프레임 워크로 테스트 할 수 없습니다

하지만, 일반 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는 그다지 큰 차이가 없어야합니다. 틀릴 수도 있습니다.

1

다시 LINQ to SQL로 돌아갈 필요가 없습니다. 당신이 할 수있는 개조가 있습니다. 엔티티 프레임 워크에서 저장 프로 시저의 결과는 ObjectSet의 모음이므로 열거 형을 일반적인 열거 형 모음으로 변환하지 않으면 열거 형을 두 번 이상 허용하지 않습니다. 이러한 경우에 대처하기 위해

간단한 방법은 아래와 같이 여기

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

r.ToList() 마법을 만드는, 그리고 코드는 딸꾹질없이 작동합니다!

참고 :이 게시물은 꽤 오래된 것으로 알고 있지만, 도움을 청하는 사람들을 돕는 것을 생각했습니다!

+0

Stack Overflow에 오신 것을 환영합니다! 게시물에 서명을 포함 할 필요가 없습니다. 사용자 카드가 자동으로 추가됩니다. 자세한 내용은 [도움말] (http://stackoverflow.com/help/behavior)을 읽으십시오. – Artemix

+0

힌트 : 텍스트를 코드로 서식 지정 - 줄 앞에 공백 4 개를 추가하십시오. – Artemix

관련 문제