쿼리에서 SPQuery TotalItem을 가져옵니다
-
10-12-2019 - |
문제
내 쿼리와 일치하는 총 항목 수를 얻고 싶지만 결과를 제한합니다.
- 는 목록에 100 개의 항목이 있음을 알려주십시오. 목록의 100 항목 중 100 개 항목 중
- 50은 내 쿼리와 일치합니다.
- 50 명 중 10 명을 얻고 싶습니다.
- 어떻게 "50"을 얻을 수 있습니까?
간단한 쿼리 :
.SPQuery query = new SPQuery() { Query = "<OrderBy><FieldRef Name='FullName' /></OrderBy><Where><Contains><FieldRef Name='FirstName' /><Value Type='Text'>e</Value></Contains></Where>" }; SPList oList = web.Lists["Profile"]; SPListItemCollection items = oList.GetItems(query); int count = items.Count;
해결책
이것은 특히 많은 양의 데이터에 관해서는 문제를 해결하기가 매우 잘 알려져 있고 매우 어렵습니다. SharePoint를 만지지 않아도 많은 시스템 (Google이 명백한 예)이 대략적인 필터링 된 요소 만 반환하는 것만 알아 냈을 것입니다.
기본적으로 할 수있는 유일한 것은 동일한 쿼리를 수행하지만 사용 권한을 제외하고 결과에서 ID를 제외한 모든 필드를 제외하는 것입니다. SQL의 관점에서 다음과 같을 것입니다.
SELECT id FROM list WHERE (filter)
.
웹 응용 프로그램 설정에서 찾을 수있는 목록에 5 000 개 이상의 항목이 있거나 "스로틀링 한도를 초과하는 다른 값을 초과 할 수있는 다른 값)이 있으면 에 참여하는 모든 필드를 넣어야합니다. ( "목록 설정"페이지에서 "인덱싱 된 열"링크 참조), 및 필드 에 의해 포기 필터링에 대한 필터가 (이는 조회, 관리 메타 데이터, 사람 및 그룹, 워크 플로 상태)입니다.
또한 큰 숫자 로이 쿼리를 제한하는 것이 좋습니다. 이는 100,000 개의 항목 또는 이와 같은 것들을 제한하는 것이 좋습니다 :
.
SELECT TOP 100000 id FROM list WHERE (filter)
그래서, Spquery에 어떻게 적용될 것인가?
.
var query = new SPQuery()
{
// please make sure FirstName and FullName fields are added to index!!
Query = "<OrderBy><FieldRef Name='FullName' /></OrderBy><Where><Contains><FieldRef Name='FirstName' /><Value Type='Text'>e</Value></Contains></Where>",
ViewFields = "ID",
ViewFieldsOnly = true,
IncludePermissions = false,
RowLimit = 100000
};
양의 양의 항목이 있거나 (SQL 측면에서) 필터가있는 경우 느리게 수행됩니다.
다른 팁
실시간 쿼리 히트 성능 꽤 어렵습니다. 정말로 반복하지 않고 목록에 항목을 계산하는 좋은 방법은 없습니다.
또한 ItemCount 및 List.Items.Count가 다른 경우에 다른 숫자를 반환합니다.
큰 목록의 경우이 결정 뒤에는 추론이 있습니다. http://technet.microsoft.com/en-us/library/cc262813.aspx.