2011-09-05 3 views
1

테이블 문서의 상위 250 개의 최신 레코드로 GridView를 초기화합니다. 버튼을 모두 추가하여 모든 항목을로드 할 수 있습니다 (avarage에서 모든 반환 된 레코드는 400에서 3000까지 다양합니다).최소한의 오버 헤드로 LINQ를 사용하여 레코드의 하위 집합을 제외하고 데이터 선택

모든 레코드 집합을 완전히로드하는 대신 증분 접근 방식을 사용하여 나머지 레코드 만 추가하고 이미로드 된 레코드는 추가하지 않는 것이 좋습니다.

나는 다음과 같은 쿼리를 사용하지만 경우 : I 쿼리와 하위 쿼리를 실행하는 클라이언트에서 서버로 250 개 ID를 통과 한 후 결과를 반환해야합니다

SELECT d.ItemID FROM Documents d 
WHERE NOT EXISTS 
(SELECT ItemID FROM Documents WHERE CategoryID = d.CategoryID) 

합니다.

이 절차를 어떻게 최적화 할 수 있습니까? 또는이 경우에는 모든 레코드 집합을 훌륭하게 반환하는 것입니까?

+0

어떻게이 문제는 LINQ 관련이 있습니까? LINQ to SQL 또는 LINQ to Entities입니까? 질문에 언급하지 않습니다. –

답변

1

첫 번째와 두 번째 쿼리간에 상위 250 개 레코드가 동일합니까? 즉, 첫 번째 호출과 두 번째 호출간에 데이터가 변경 될 가능성이 있습니까?

하지 않으면, 당신은 단순히 두 번째 (가정 T-SQL)에서 행을 제외 할 첫 번째 쿼리를 사용할 수 있습니다

SELECT 
    d.ItemID 
FROM 
    Documents d 
WHERE 
    d.ItemID NOT IN 
     (
     --this would be whatever your first query was 
     SELECT TOP 250 ItemID 
     FROM Documents 
     WHERE CategoryID = d.CategoryID 
     ORDER BY d.ItemID DESC 
    ) 
+0

최소한 pageload와 사용자가 버튼을 누를 때까지 레코드가 항상 동일합니다. 심지어 내가 처음 250 개 레코드를 제외한다고 생각했지만, 더 나은 접근 방법이 있을지는 의문 이었지만, 쿼리에서 레코드를 직접 제외하는 것이 좋습니다. – Francesco

관련 문제