Да. Нет установленного предела OR
. (Из-за того, как КАМЛ превращаются в SQL есть максимальная глубина около 2000 сцепленных операторов, но это может быть увеличено с помощью балансировки дерева запроса.)
Просто держать гнездования в OR
«S для желаемой комбинации , Я рекомендую использовать XNode/XElement и рекурсию для создания функции, чтобы сделать это «волшебным образом».
Обратите внимание, что вложенности очень просто (я написал в в S-expression форме, которая также префикс, чтобы показать, что происходит, наряду с инфиксной 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 Version"), и посмотреть, какие проблемы с производительностью есть, если они есть.
Счастливое кодирование.