Недавно понадобилось написать 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>