2012-03-16 5 views
2

나는 CAML에서 두 명의 중보자로 제한된 이유에 대해 더 일찍 질문을 받았다. 참고로이 쿼리에는 여전히 CAML을 사용할 수 있습니까?

: Trouble with OR in Sharepoint CAML

내가 지금 알고 싶은 것은 나는 내가 5 중 어떤 일치하는 항목을 찾지 목록에서 모든 항목을 수집 5 개 또는 매개 변수를 받아들이는이 CAML 쿼리를 포맷 할 수있다 매개 변수.

내가 묻는 이유는 샌드 박스 솔루션 웹 파트의 Designer 배포로 제한되기 때문입니다. 이러한 솔루션은 리소스가 매우 제한되어 있으므로 가능한 한 효율적으로 쿼리하고 싶습니다. 대부분의 LINQ 솔루션은 CAML만큼 효율적으로 SQL 호출을 변경하지 않습니다.

답변

5

예. OR에 대한 제한이 없습니다. 합니다 (CAML는 SQL로 전환되는 방식으로 인해이 약 2000 체인 사업자의 최대 깊이이지만,이 쿼리 트리의 균형을 증가 할 수있다.)

그냥 원하는 조합을 중첩OR 년대 유지 . XNode/XElement와 재귀를 사용하여 "마술처럼"이 작업을 수행하는 함수를 만드는 것이 좋습니다.

1: (OR a b)    => a || b    => a || b 
2: (OR (OR a b) c)   => (a || b) || c   => a || b || c 
3: (OR (OR (OR a b) c) d) => ((a || b) || c) || d => a || b || c || d 

참고 : 중첩 (나는 또한 중위 C#을 조건 동등한와 함께 일어나는 보여 접두사입니다 S-expression 형태로에서 쓴) 매우 간단하다는

주 새로운 각각 OR은 이전 표현식을 "랩핑"합니다.

성능은 기본 SQL Server 데이터베이스의 성능을 기반으로하며 어떤 필드가 CAML에서 사용되는지에 따라 달라집니다. 필드가 인덱스의 일부인 경우 연산은 "같음"또는 "범위"조건에 대해 매우 빠릅니다. 열이 인덱스의 일부가 아니더라도 "작은"크기의 목록의 경우 매우 빠른 작업입니다.

가장 좋은 방법은 U2U CAML Query Builder ("Windows Version")과 같은 도구를 사용하여 "시험해보십시오"하고 성능상의 문제가 있는지 확인하는 것입니다.

해피 코딩.

관련 문제