Да. Не установлено ограничение на 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") и посмотреть, какие существуют проблемы с производительностью, если таковые имеются.
Удачного кодирования.