문제

내 쿼리와 일치하는 총 항목 수를 얻고 싶지만 결과를 제한합니다.

  • 는 목록에 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.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top