Релиз Camlex 3.6 и Camlex.Client 1.5

Некоторое время назад вышел очередной релиз версии 3.6 библиотеки с открытым исходным кодом Camlex (а также параллельно вышла версия Camlex.Client 1.5 для управляемых клиентских приложений). Для тех, кто еще не слышал об этом проекте, это библиотека, которая помогает составлять динамические CAML запросы (т.е. запросы, построенные во время исполнения, на основе каких-либо параметров), используя лямбда-выражения C# и fluent-интерфейсы. Множество самых разных примеров использования библиотеки можно найти здесь. Также в моем блоге вы можете найти другие статьи, связанные с проектом.

В новом релизе была добавлена поддержка явного преобразования булевых выражений. Т.е. если в предыдущих версиях необходимо было писать выражения следующим образом:

string caml = Camlex.Query().Where(x => (bool)x["Foo"] == true).ToString();

что в свою очередь производит следующий CAML запрос:

<Where>
  <Eq>
    <FieldRef Name="Foo" />
    <Value Type="Boolean">1</Value>
  </Eq>
</Where>

то теперь их можно написать в более простом и коротком виде без явного сравнения с true или false:

string caml = Camlex.Query().Where(x => (bool)x["Foo"]).ToString();

Эта запись короче и не вызовет проблем с ReSharper-ом, который может посоветовать удалить ненужное на его взгляд явное сравнение (в предыдущей версии библиотеки если бы вы последовали этому совету, это вызвало бы исключение во время исполнения).

Для того чтобы получить CAML запрос, в котором используется сравнение с false, используйте оператор НЕ (!):

string caml = Camlex.Query().Where(x => !(bool)x["Foo"]).ToString();

который произведет:

<Where>
  <Eq>
    <FieldRef Name="Foo" />
    <Value Type="Boolean">0</Value>
  </Eq>
</Where>

Такой же упрощенный синтаксис доступен в сложных запросах, использующих операции сравнения && и ||:

string caml = Camlex.Query().Where(x => ((bool)x["foo1"] && !(bool)x["foo2"]) ||
    (bool)x["foo3"]).ToString();

что даст нам следующий запрос:

<Where>
  <Or>
    <And>
      <Eq>
        <FieldRef Name="Foo1" />
        <Value Type="Boolean">1</Value>
      </Eq>
      <Eq>
        <FieldRef Name="Foo2" />
        <Value Type="Boolean">0</Value>
      </Eq>
    </And>
    <Eq>
      <FieldRef Name="Foo3" />
      <Value Type="Boolean">1</Value>
    </Eq>
  </Or>
</Where>

Также соответствующее изменение было добавлено в reverse engeneering функционал Camlex-а, который позволяет получить C# представление CAML запроса с использованием Camlex, что является обратным преобразованием по сравнению с примерами, показанными выше. Т.е. если ввести например CAML запрос из последнего примера в бесплатный сервис Camlex online, то вы получите также короткую версию преобразования булевого выражения без явного сравнения с true или false. Сервис Camlex online был создан специально для упрощения использования библиотеки Camlex.Net разработчиками, работавшими до этого с обычными строковыми CAML запросами.

Новую версию можно скачать с сайта проекта на Codeplex либо с из NuGet с помощью следующих команд:

Install-Package Camlex.NET.dll
Install-Package Camlex.Client.dll

Если у вас есть комментарии или идеи для будущих релизов, не стесняйтесь писать их на страницу обсуждений на сайте проекта. Также можете создавать свои fork-и и присылать мне pull-запросы. По мере нахождения свободного времени я их просматриваю и, если целесообразно, включаю в проект.

Реклама

Об авторе sadomovalex

Старший инженер, team lead, консультант. Работаю в стеке .Net. Последние несколько лет занимаюсь разработкой enterprise приложений под Sharepoint, чему и будет в основном посвящена тематика этого блога. Также активно использую и интересуюсь ASP.Net MVC, DDD, TDD, Agile. Активно участвую в жизни многих профессиональных сообществ, SPb .Net UG, SPb ALT.Net, rsdn, Finland SP UG и др.
Запись опубликована в рубрике CAML, Camlex.NET, Sharepoint. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s