«не содержит» в CAML? - PullRequest
       28

«не содержит» в CAML?

7 голосов
/ 04 декабря 2008

В CAML Я могу запросить элементы списка SharePoint, используя элемент «Содержит», но нет элемента «не содержит», который я мог бы использовать.

Так, каков наилучший способ получить элементы, которые не содержат строки? Есть ли лучший способ, чем перебирать каждый элемент?

Ответы [ 5 ]

4 голосов
/ 04 декабря 2008

То же ограничение применяется к BeginWith. Я не знаю ни одного хорошего решения, к сожалению. Что вы можете сделать: выполнить запрос Contains-Query, пройтись по каждому элементу и получить идентификаторы, а затем выполнить еще один большой запрос для «ID NotEqual 1 или ID NotEqual 2 или ID NotEqual 3 ......» Поскольку идентификатор индексируется как Насколько я знаю, это должно оказать меньшее влияние на базу данных, но все равно пахнет очень плохо.

Для небольших списков это не имеет значения, для больших списков я бы использовал SQL Server Profiler, чтобы увидеть, как это повлияет.

3 голосов
/ 04 марта 2010

Так, каков наилучший способ получить элементы, которые не содержат строку?

Попробуйте использовать вычисляемый столбец, чтобы отразить искомое значение, создав противоположное значение.

Например, скажем, столбец называется IsCritical . Затем добавьте столбец как «ДА / НЕТ» и формулу как

=ISNUMBER(FIND("Critical"), [Title])

Тогда в вашем CAML-запросе

<Query>
<Where>
   <Eq>
     <FieldRef Name='IsCritical'/>
     <Value Type='Boolean'>0</Value>
   </Eq>
</Where>
</Query>

0 в этом запросе как бы отражает "Не критично". Однако я не уверен, что производительность может отличаться от наличия в CAML «Not Containts», которого, к сожалению, не существует.

См. Также Схема CAML-запроса на MSDN

0 голосов
/ 18 августа 2015

TRY не включает

<NotIncludes>
<FieldRef Name='FileLeafRef' />
                                            <Value Type='Text'>stringvalue</Value>
                                        </NotIncludes>
0 голосов
/ 05 декабря 2008

@ drax: будем надеяться, что CAML исчезнет - точка. Это определенно один из худших аспектов современного программирования SP.

0 голосов
/ 04 декабря 2008

Эта проблема с 'Contains' и 'BeginsWith' также беспокоит меня. Я надеюсь, что в следующей версии Sharepoint caml будет расширен, чтобы стать настоящим инструментом, а не просто камнем на ноге.

Способ, которым я делаю это, - указать запрос как можно больше, а затем отфильтровать строки, не соответствующие условиям в коде C #. Иногда это уродливо, так как иногда приходится обрабатывать 100 строк, чтобы в итоге получить 1 результат, соответствующий условиям.

...