Недавно понадобилось написать CAML-запрос для выбора элементов списка с непустыми значениями столбца (ячейки). Нужно было выбрать все записи, в которых столбец OS имел значение "Windows", а столбец UserName был не пустым. Не будучи асом в CAML'е, сперва решил попробовать использование конструкции <Neq> и <Value Type='Text'></Value>, т.е. некий аналог var != "". Но результат оказался не очень.
<Where>
<And>
<Eq>
<FieldRef Name="OS " />
<Value Type='Text'>Windows</Value>
</Eq>
<Neq>
<FieldRef Name="UserName />
<Value Type='Text'></Value>
</Neq>
</And>
</Where>
В итоге, заглянув в документацию CAML, обнаружил конструкцию <IsNotNull>. Ее использование оказалось правильным решением:
<Where>
<And>
<Eq>
<FieldRef Name="OS " />
<Value Type='Text'>Windows</Value>
</Eq>
<IsNotNull>
<FieldRef Name="UserName" />
</IsNotNull>
</And>
</Where>
Этот запрос возвращает элементы списка, в которых OS равно "Windows", а UserName не пусто.
Если же вам понадобится выбрать ячейки с пустым значением UserName, то на помощь конструкция <IsNull>.
<Where>
<And>
<Eq>
<FieldRef Name="OS " />
<Value Type='Text'>Windows</Value>
</Eq>
<IsNull>
<FieldRef Name="UserName" />
</IsNull>
</And>
</Where>
