2011-05-04 5 views
5

페이지가있는 listview의 성능을 최대화하려는 데 문제가 있습니다.Entity Framework를 사용하여 범위 선택

엔티티 프레임 워크에서 select 문을 수행하지만 결과의 범위 (범위 = 목록보기의 한 페이지 항목) 만 반환하려고합니다.

Google에서 검색했지만이 결과가 없습니다. 나는 오직 .ToList(). GetRange (인덱스 시작, 인덱스 끝내기)를 할 수 있다는 것을 알았지 만, 모든 아이템이 메모리에로드 될 것이고, 그것은 내가 피하고 싶은 것입니다 ...

누군가가 할 수 있습니까? 이 일이 가능한지 말해 주시겠습니까? (스토어드 프로 시저 또는 뷰 또는 그와 유사한 것을 사용하고 싶지 않습니다. 우리의리스트 뷰는 재사용 가능해야하기 때문에 ...)

고마워!

+1

건너 뛰기 정렬 된 쿼리에 (50) .Take (10)에게 50 번째부터 10 개 항목을 제공 할 것입니다. –

답변

13

당신은 .Take(x).ToList()

편집 사용할 수 있어야합니다 : 미안, .Skip(startPosition).Take(numberOfItems).ToList()

+0

고마워,이 트릭을 :) –

1

을 시도하고 당신이 게으른 로딩을 사용하지 않는 경우 로딩을 방지하기 위해 필터를 적용 할 때 하중()하기 전에 쿼리()를 사용해야합니다 필터를 적용하기 전에 전체 모음 :

context.Entry(blog) 
    .Collection(b => b.Posts) 
    .Query() 
    .Skip(startPosition) 
    .Take(numberOfItems) 
    .Load() 
    .ToList(); 

이 탐색 속성에 대한 게으른 로딩을 해제하는 것이 가장 좋습니다 쿼리 방법을 사용하여. 그렇지 않으면 필터링 된 쿼리가 실행되기 전이나 후에 지연로드 메커니즘에 의해 전체 컬렉션이 자동으로로드 될 수 있기 때문입니다. 자세한 내용은

: http://msdn.microsoft.com/en-us/data/jj574232.aspx

관련 문제