2009-06-11 4 views
0

상당히 큰 데이터베이스를 검색하기 위해 LINQ to SQL을 사용하고 있으며 DataPager로 페이징을 수행하는 최선의 방법이 확실하지 않습니다. 나는 Skip() 및 Take() 메서드를 알고 있고 제대로 작동하도록했습니다. 그러나 데이터 페이지의 결과 수는 Take() 메서드에서 결정된 페이지 크기가 될 수 있으므로 사용할 수 없습니다. 예를 들어LINQ to SQL 및 DataPager

:

var result = (from c in db.Customers 
       where c.FirstName == "JimBob" 
       select c).Skip(0).Take(10); 

이 쿼리는 항상 1000 JimBobs가있는 경우에도, 10 개 이하의 결과를 반환합니다. 결과적으로 DataPager는 항상 단일 페이지가 있다고 생각하고 사용자는 전체 결과 세트를 탐색 할 수 없습니다. 저자가 총 조사를 위해 또 다른 쿼리를 작성하고 호출 한 온라인 기사 한 개를 보았습니다. 같은

뭔가 :

int resultCount = (from c in db.Customers 
        where c.FirstName == "JimBob" 
        select c).Count(); 

하고는있는 DataPager에 대한 그 값을 사용했다. 하지만 실제로 모든 쿼리를 복사하여 별도의 호출에 붙여 넣을 필요가 없으므로 확실한 이유 때문에 결과를 페이지에 표시해야합니다. 여러 쿼리에서 다시 사용할 수있는 더 쉬운 방법이 있습니까?

감사합니다.

답변

0

이와 같은 상황에서 DB 전체 결과 집합의 필드로 전체 레코드 수를 반환하는 경우가 있습니다.

기본적으로 두 가지 옵션 만 있습니다. 카운트에 대한 다른 검색어를 쓰거나 결과의 열로 반환하십시오.

0

LINQ는 defferred 쿼리 실행을 제공 기억 ...

var qry =  from c in db.Customers    
       where c.FirstName == "JimBob" 
       select c; 

int resultCount = qry.Count(); 

var results = qry.Skip(0).Take(10); 
+0

감사합니다. 나는 실제로 사이트에서 요구하는 성능을 얻을 수 없어서 게시 이후이 접근법에서 벗어났습니다. 위의 코드는 데이터베이스에 한 번만 도달합니까? –

+0

아니요, 데이터베이스에 두 번 도달합니다. – TGnat