Могу ли я использовать CAML для этого запроса? - PullRequest
2 голосов
/ 16 марта 2012

Ранее у меня был вопрос (который был решен) о том, почему я был ограничен двумя параметрами в CAML.

Для справки: Проблема с ИЛИ в Sharepoint CAML

Теперь я хочу узнать, могу ли я переформатировать этот запрос CAML, чтобы принять 5 параметров ИЛИ, где я собираю ВСЕ элементы из списка, ГДЕ нахожу совпадение с любым из 5 параметров.

Причина, по которой я спрашиваю, заключается в том, что я ограничен развертыванием в Designer веб-части решения Sandbox. Эти решения имеют очень ограниченные ресурсы, и я хочу иметь как можно более эффективный запрос, и большинство решений LINQ не так эффективно изменяют вызовы SQL, как CAML.

1 Ответ

5 голосов
/ 16 марта 2012

Да. Не установлено ограничение на OR. (Из-за того, как CAML превращается в SQL, максимальная глубина составляет около 2000 связанных операторов, но это можно увеличить путем балансировки дерева запросов.)

Просто сохраняйте вложенность OR для нужной комбинации. Я рекомендую использовать XNode / XElement и рекурсию для создания функции, которая делает это «волшебным образом».

Обратите внимание, что вложение очень простое (я написал в форме S-выражение , которая также является префиксом , чтобы показать, что происходит, вместе с infix C # условный эквивалент):

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

Обратите внимание, что каждый новый OR просто "оборачивает" предыдущее выражение.

Производительность зависит от производительности базовой базы данных SQL Server и зависит от того, какое поле используется в CAML. Если поле является частью индекса, то операции выполняются очень быстро для условий «равно» или «диапазон». Даже если столбцы не являются частью индекса, для списков «маленького» размера это все еще очень быстрая операция.

Лучше всего "просто попробовать" с помощью такого инструмента, как U2U CAML Query Builder ("Версия для Windows") и посмотреть, какие существуют проблемы с производительностью, если таковые имеются.

Удачного кодирования.

...