2012-03-16 2 views
2

У меня был вопрос раньше (что было решено) о том, почему я был ограничен двумя параметрами в CAML.Могу ли я использовать CAML для этого запроса?

Для справки: Trouble with OR in Sharepoint CAML

Что я теперь хочу знать, могу ли я переформатировать этот CAML запрос, чтобы принять 5 или параметров, где я собрать все элементы из списка я нахожу матч для любого из 5 параметры.

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

ответ

5

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

Счастливое кодирование.

Смежные вопросы