Комментарии можно оставлять "здесь"
В простом виде CAML запрос может выглядеть следующим образом
<Query>
<Where>
<And>
<Eq>
<FieldRef Name="f1" />
<Value Type="Text">abc</Value>
</Eq>
<Eq>
<FieldRef Name="f2" />
<Value Type="Integer">2</Value>
</Eq>
</And>
</Where>
</Query>
Могут использоваться логические операторы:
AND и OR
и некоторые основные операторы сравнения:
<BeginsWith>, <Contains>, <Eq>, <Geq>, <Gt>, <IsNull>, <IsNotNull>, <Lt>, <Leq>, <Neq>
Пример подстановки в запрос текущего пользователя
<Query>
<Where>
<Eq>
<FieldRef Name="fieldUSer" />
<Value Type="Integer">
<UserID />
</Value>
</Eq>
</Where>
</Query>
Пример использования ID пользователя (только в SPQuery)
<Where>
<Eq>
<FieldRef Name="recipient" LookupId="TRUE" />
<Value Type="User">1</Value>
</Eq>
</Where>
<OrderBy>
<FieldRef Name="ID" Ascending="False" />
</OrderBy>
Пример использования Boolean
<Where>
<Eq>
<FieldRef Name="readMessage" />
<Value Type="Boolean">1</Value>
</Eq>
</Where>
Обращаю внимание, что значение может быть и null (например, поле было создано после того как в списке уже были данные). В этом случаи как бы появляется третье значение, которое можно фильтровать только через <IsNull> или <IsNotNull>
<Where>
Обращаю внимание, что значение может быть и null (например, поле было создано после того как в списке уже были данные). В этом случаи как бы появляется третье значение, которое можно фильтровать только через <IsNull> или <IsNotNull>
<Where>
<IsNull>
<FieldRef Name="readMessage" />
</IsNull>
</Where>
Пример использования текущей даты
<Query>
<Where>
<Geq>
<FieldRef Name="fieldDate" />
<Value Type="DateTime">
<Today OffsetDays="-5" />
</Value>
</Geq>
</Where>
</Query>
Когда нам в результате необходимо вывести не только элементы верхнего уровня, но и все элементы, лежащие в папках, то необходимо в свойствах представления или SPQuery установить соотвественно:
Для любителей лямбда выражений очень рекомендую для построения CAML запросов использовать четвёртый способ данной статьи.
Способ заключается в использовании библиотеки Camlex.NET. Очевидным преимуществом является то, что будет невозможно допустить синтаксическую ошибку в запросе.
Вот пример получения CAML запроса:
Комментарии можно оставлять "здесь"
Когда нам в результате необходимо вывести не только элементы верхнего уровня, но и все элементы, лежащие в папках, то необходимо в свойствах представления или SPQuery установить соотвественно:
<View BaseViewID="1" Type="HTML" WebPartZoneID="Main" Scope="RecursiveAll" ...
или
query.ViewAttributes = "Scope=\"Recursive\"";
Для любителей лямбда выражений очень рекомендую для построения CAML запросов использовать четвёртый способ данной статьи.
Способ заключается в использовании библиотеки Camlex.NET. Очевидным преимуществом является то, что будет невозможно допустить синтаксическую ошибку в запросе.
Вот пример получения CAML запроса:
query.Query
= Camlex.Query().Where(w => (string)w["eventType"]
== "Новость" && (bool)w["shared"] == true).OrderBy(o
=> o["eventDate"]).ToString();
Комментарии можно оставлять "здесь"
Комментариев нет:
Отправить комментарий