<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>camlex Wiki Rss Feed</title><link>http://camlex.codeplex.com/wikipage</link><description>camlex Wiki Rss Description</description><item><title>Updated Wiki: Future improvements</title><link>https://camlex.codeplex.com/wikipage?title=Future improvements&amp;version=22</link><description>&lt;div class="wikidoc"&gt;The following are the features which are to be implemented in the next version of Camlex.NET project:&lt;br /&gt;&lt;del&gt;* Reverse engineering from pure CAML queries to C#-based Camlex queries&lt;/del&gt; -done&lt;br /&gt;&lt;del&gt;* Camlex.Net for Client OM - http://camlex.codeplex.com/workitem/13989&lt;/del&gt; -done
&lt;ul&gt;&lt;li&gt;Support for special forms for DATETIME values: &amp;lt;Value Type=&amp;quot;DateTime&amp;quot;&amp;gt;[Today + 7]&amp;lt;/Value&amp;gt; and &amp;lt;Value Type=&amp;quot;DateTime&amp;quot;&amp;gt;&amp;lt;Today /&amp;gt;&amp;lt;/Value&amp;gt; (http://camlex.codeplex.com/discussions/270483)&lt;/li&gt;&lt;/ul&gt;
&lt;del&gt;* Support for UserID in queries by user - see http://camlex.codeplex.com/discussions/264821&lt;/del&gt; - done
&lt;ul&gt;&lt;li&gt;Support for MEMBERSHIP nodes of CAML language&lt;/li&gt;
&lt;li&gt;Support for using Camlex.NET project in Silverlight applications&lt;/li&gt;
&lt;li&gt;Support for NULLABLE attribute of CAML language - &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsitedataquery.viewfields.aspx"&gt;http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsitedataquery.viewfields.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Support for Taxonomy fields (only for SharePoint 2010) - &lt;a href="http://msdn.microsoft.com/en-us/library/ff625182.aspx"&gt;http://msdn.microsoft.com/en-us/library/ff625182.aspx&lt;/a&gt;, e.g. for TaxonomyFieldTypeMulti - &lt;a href="https://camlex.codeplex.com/workitem/13998"&gt;https://camlex.codeplex.com/workitem/13998&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Support for float, double and decimal native data types&lt;/li&gt;
&lt;li&gt;Support more features available in CAML (e.g. &amp;lt;ProjectProperty&amp;gt; element inside &amp;lt;Value&amp;gt; tag)&lt;/li&gt;
&lt;li&gt;Compiled queries for better performance - see http://camlex.codeplex.com/discussions/330815&lt;/li&gt;
&lt;li&gt;No explicit comparisons for boolean fields: http://camlex.codeplex.com/workitem/13991?ProjectName=camlex&lt;/li&gt;&lt;/ul&gt;
&lt;del&gt;* Add conditions to existing string query - &lt;a href="http://camlex.codeplex.com/discussions/353158"&gt;http://camlex.codeplex.com/discussions/353158&lt;/a&gt;&lt;/del&gt; -done
&lt;ul&gt;&lt;li&gt;Combine several string queries to one - &lt;a href="http://camlex.codeplex.com/discussions/431325"&gt;http://camlex.codeplex.com/discussions/431325&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Use strongly typed classes in queries: &lt;a href="http://camlex.codeplex.com/discussions/438324#post1022401"&gt;http://camlex.codeplex.com/discussions/438324#post1022401&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>sadomovalex</author><pubDate>Wed, 17 Apr 2013 20:08:01 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Future improvements 20130417080801P</guid></item><item><title>Updated Wiki: Future improvements</title><link>http://camlex.codeplex.com/wikipage?title=Future improvements&amp;version=21</link><description>&lt;div class="wikidoc"&gt;The following are the features which are to be implemented in the next version of Camlex.NET project:&lt;br /&gt;&lt;del&gt;* Reverse engineering from pure CAML queries to C#-based Camlex queries&lt;/del&gt; -done&lt;br /&gt;&lt;del&gt;* Camlex.Net for Client OM - http://camlex.codeplex.com/workitem/13989&lt;/del&gt; -done
&lt;ul&gt;&lt;li&gt;Support for special forms for DATETIME values: &amp;lt;Value Type=&amp;quot;DateTime&amp;quot;&amp;gt;[Today + 7]&amp;lt;/Value&amp;gt; and &amp;lt;Value Type=&amp;quot;DateTime&amp;quot;&amp;gt;&amp;lt;Today /&amp;gt;&amp;lt;/Value&amp;gt; (http://camlex.codeplex.com/discussions/270483)&lt;/li&gt;&lt;/ul&gt;
&lt;del&gt;* Support for UserID in queries by user - see http://camlex.codeplex.com/discussions/264821&lt;/del&gt; - done
&lt;ul&gt;&lt;li&gt;Support for MEMBERSHIP nodes of CAML language&lt;/li&gt;
&lt;li&gt;Support for using Camlex.NET project in Silverlight applications&lt;/li&gt;
&lt;li&gt;Support for NULLABLE attribute of CAML language - &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsitedataquery.viewfields.aspx"&gt;http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsitedataquery.viewfields.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Support for Taxonomy fields (only for SharePoint 2010) - &lt;a href="http://msdn.microsoft.com/en-us/library/ff625182.aspx"&gt;http://msdn.microsoft.com/en-us/library/ff625182.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Support for float, double and decimal native data types&lt;/li&gt;
&lt;li&gt;Support more features available in CAML (e.g. &amp;lt;ProjectProperty&amp;gt; element inside &amp;lt;Value&amp;gt; tag)&lt;/li&gt;
&lt;li&gt;Compiled queries for better performance - see http://camlex.codeplex.com/discussions/330815&lt;/li&gt;
&lt;li&gt;No explicit comparisons for boolean fields: http://camlex.codeplex.com/workitem/13991?ProjectName=camlex&lt;/li&gt;&lt;/ul&gt;
&lt;del&gt;* Add conditions to existing string query - &lt;a href="http://camlex.codeplex.com/discussions/353158"&gt;http://camlex.codeplex.com/discussions/353158&lt;/a&gt;&lt;/del&gt; -done
&lt;ul&gt;&lt;li&gt;Combine several string queries to one - &lt;a href="http://camlex.codeplex.com/discussions/431325"&gt;http://camlex.codeplex.com/discussions/431325&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Use strongly typed classes in queries: &lt;a href="http://camlex.codeplex.com/discussions/438324#post1022401"&gt;http://camlex.codeplex.com/discussions/438324#post1022401&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>sadomovalex</author><pubDate>Sat, 30 Mar 2013 06:28:14 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Future improvements 20130330062814A</guid></item><item><title>Updated Wiki: Future improvements</title><link>http://camlex.codeplex.com/wikipage?title=Future improvements&amp;version=20</link><description>&lt;div class="wikidoc"&gt;The following are the features which are to be implemented in the next version of Camlex.NET project:&lt;br /&gt;&lt;del&gt;* Reverse engineering from pure CAML queries to C#-based Camlex queries&lt;/del&gt; -done&lt;br /&gt;&lt;del&gt;* Camlex.Net for Client OM - http://camlex.codeplex.com/workitem/13989&lt;/del&gt; -done
&lt;ul&gt;&lt;li&gt;Support for special forms for DATETIME values: &amp;lt;Value Type=&amp;quot;DateTime&amp;quot;&amp;gt;[Today + 7]&amp;lt;/Value&amp;gt; and &amp;lt;Value Type=&amp;quot;DateTime&amp;quot;&amp;gt;&amp;lt;Today /&amp;gt;&amp;lt;/Value&amp;gt; (http://camlex.codeplex.com/discussions/270483)&lt;/li&gt;&lt;/ul&gt;
&lt;del&gt;* Support for UserID in queries by user - see http://camlex.codeplex.com/discussions/264821&lt;/del&gt; - done
&lt;ul&gt;&lt;li&gt;Support for MEMBERSHIP nodes of CAML language&lt;/li&gt;
&lt;li&gt;Support for using Camlex.NET project in Silverlight applications&lt;/li&gt;
&lt;li&gt;Support for NULLABLE attribute of CAML language - &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsitedataquery.viewfields.aspx"&gt;http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsitedataquery.viewfields.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Support for Taxonomy fields (only for SharePoint 2010) - &lt;a href="http://msdn.microsoft.com/en-us/library/ff625182.aspx"&gt;http://msdn.microsoft.com/en-us/library/ff625182.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Support for float, double and decimal native data types&lt;/li&gt;
&lt;li&gt;Support more features available in CAML (e.g. &amp;lt;ProjectProperty&amp;gt; element inside &amp;lt;Value&amp;gt; tag)&lt;/li&gt;
&lt;li&gt;Compiled queries for better performance - see http://camlex.codeplex.com/discussions/330815&lt;/li&gt;
&lt;li&gt;No explicit comparisons for boolean fields: http://camlex.codeplex.com/workitem/13991?ProjectName=camlex&lt;/li&gt;&lt;/ul&gt;
&lt;del&gt;* Add conditions to existing string query - &lt;a href="http://camlex.codeplex.com/discussions/353158"&gt;http://camlex.codeplex.com/discussions/353158&lt;/a&gt;&lt;/del&gt; -done
&lt;ul&gt;&lt;li&gt;Combine several string queries to one - &lt;a href="http://camlex.codeplex.com/discussions/431325"&gt;http://camlex.codeplex.com/discussions/431325&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>sadomovalex</author><pubDate>Wed, 30 Jan 2013 23:57:17 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Future improvements 20130130115717P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://camlex.codeplex.com/documentation?version=16</link><description>&lt;div class="wikidoc"&gt;Pages with future improvements - &lt;a href="http://camlex.codeplex.com/wikipage?title=Future%20improvements&amp;referringTitle=Documentation"&gt;Future improvements&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Additional Resources&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;Camlex Online &lt;a href="http://camlex-online.org"&gt;http://camlex-online.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Blog &lt;a href="http://sadomovalex.blogspot.com/search/label/Camlex.NET"&gt;http://sadomovalex.blogspot.com&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;b&gt;I. Camlex architecture and public interface&lt;/b&gt;&lt;br /&gt;Generally Camlex – is translator from lambda expression into CAML:&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=camlex&amp;DownloadId=102143" alt="architecture.jpg" title="architecture.jpg" /&gt;&lt;br /&gt;It receives expression like&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
x =&amp;gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;] == 1
&lt;/pre&gt;&lt;/div&gt;on input and translate it to valid CAML query. The exact signature of lambda expressions depends on method call of Camlex public interface. The most important interface in Camlex.NET assembly is IQuery and its implementation – Query class:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;interface&lt;/span&gt; IQuery
{
    IQuery Where(Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt; expr);
    IQuery WhereAll(IEnumerable&amp;lt;Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt; expressions);
    IQuery WhereAny(IEnumerable&amp;lt;Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt; expressions);
    IQuery OrderBy(Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt;&amp;gt; expr);
    IQuery OrderBy(Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;object&lt;/span&gt;[]&amp;gt;&amp;gt; expr);
    IQuery OrderBy(IEnumerable&amp;lt;Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt; expressions);
    IQuery GroupBy(Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt;&amp;gt; expr);
    IQuery GroupBy(Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;object&lt;/span&gt;[]&amp;gt;&amp;gt; expr, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;? collapse, &lt;span style="color:Blue;"&gt;int&lt;/span&gt;? groupLimit);
    IQuery GroupBy(Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt;&amp;gt; expr, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;? collapse, &lt;span style="color:Blue;"&gt;int&lt;/span&gt;? groupLimit);
    IQuery GroupBy(Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt;&amp;gt; expr, &lt;span style="color:Blue;"&gt;int&lt;/span&gt;? groupLimit);
    IQuery GroupBy(Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt;&amp;gt; expr, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;? collapse);
    XElement[] ToCaml(&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; includeQueryTag);
    &lt;span style="color:Blue;"&gt;string&lt;/span&gt; ToString();
    &lt;span style="color:Blue;"&gt;string&lt;/span&gt; ToString(&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; includeQueryTag);
}
&lt;/pre&gt;&lt;/div&gt;As you can see most methods returns itself – so fluent interfaces calls are available with Camlex:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;] != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
        .GroupBy(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;CreatedBy&amp;quot;&lt;/span&gt;]).ToString();
&lt;/pre&gt;&lt;/div&gt;Also notice that it has ToCaml() method which returns valid xml in array of XElement objects. It means that it can be simply customizable – for example you can use Linq to Xml or classes from System.Xml.Linq namespace in order to modify resulting query.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;II. Lambda expressions syntax&lt;/b&gt;&lt;br /&gt;Internally Camlex uses expression trees in order to parse lambda expressions and translate it to CAML. There are 2 types of syntaxes allowed in Camlex (here and below “x” – is a parameter for lambda expression with SPListItem data type defined inMicrosoft.Sharepoint.dll):
&lt;ol&gt;&lt;li&gt;Native syntax:&lt;/li&gt;&lt;/ol&gt;
&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
x =&amp;gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;] == 1
&lt;/pre&gt;&lt;/div&gt;I.e. you write integer rvalue and cast lvalue to int
&lt;ol&gt;&lt;li&gt;String based syntax:&lt;/li&gt;&lt;/ol&gt;
&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;] == (DataTypes.Integer)&lt;span style="color:#A31515;"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;In opposite with native syntax you write integer value in string representation and cast it to DataTypes.Integer class (helper class defined in Camlex.NET.dll)&lt;br /&gt;Two examples above are equivalent for Camlex. We introduced 2 types of syntaxes in order to be able to write queries with not only native .Net types (int, string, bool, DateTime), but also with Sharepoint data types (see &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spfieldtype.aspx"&gt;http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spfieldtype.aspx&lt;/a&gt;). You can easy mix these syntaxes and composite them via logical operations (&amp;amp;&amp;amp;, ||) in the same expression.&lt;br /&gt;The following schema shows how Camlex translates lambda expression with native into CAML query:&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=camlex&amp;DownloadId=102146" alt="mapping.jpg" title="mapping.jpg" /&gt;&lt;br /&gt;String based syntax is very similar except Camlex uses rvalue cast to DataTypes.Integer in order to determine type of value and checks that string representation contains valid value for this type.&lt;br /&gt;What happens if Camlex cannot parse lambda expression? As described above there are only 2 types of syntaxes (and their combination via logical &amp;amp;&amp;amp; and || operations) are valid for Camlex. If provided expression has different signature – then CamlexNET.NonSupportedExpressionException will be thrown.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;III. Supported operations&lt;/b&gt;&lt;br /&gt;The list of operations available in CAML query can be found on &lt;a href="http://msdn.microsoft.com/en-us/library/ms467521.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms467521.aspx&lt;/a&gt;. Camlex supports all of them. The following table shows mapping from C# operations into CAML with examples:&lt;br /&gt;&lt;table&gt;&lt;tr&gt;&lt;th&gt; CAML &lt;/th&gt;&lt;th&gt; C# &lt;/th&gt;&lt;th&gt; Example &lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; And &lt;/td&gt;&lt;td&gt; &amp;amp;&amp;amp; &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (string) x[&amp;quot;Status&amp;quot;] == &amp;quot;Completed&amp;quot; &amp;amp;&amp;amp; (int) x[&amp;quot;ID&amp;quot;] == 1) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; Or &lt;/td&gt;&lt;td&gt; ||  &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (string)x[&amp;quot;Status&amp;quot;] != &amp;quot;Completed&amp;quot; || x[&amp;quot;Status&amp;quot;] == null) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; BeginsWith &lt;/td&gt;&lt;td&gt; String. StartsWith() &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; ((string)x[&amp;quot;Title&amp;quot;]).StartsWith(&amp;quot;Camlex&amp;quot;)) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; Contains &lt;/td&gt;&lt;td&gt; String. Contains() &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; ((string)x[&amp;quot;Title &amp;quot;]).Contains(&amp;quot;Camlex&amp;quot;)) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; Eq &lt;/td&gt;&lt;td&gt; == &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (string)x[&amp;quot;Title&amp;quot;] == &amp;quot;Camlex&amp;quot;) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; Neq &lt;/td&gt;&lt;td&gt; != &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (string)x[&amp;quot;Status&amp;quot;] != &amp;quot;Completed&amp;quot;) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; Geq &lt;/td&gt;&lt;td&gt; &amp;gt;= &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (int)x[&amp;quot;ID&amp;quot;] &amp;gt;= 1) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; Gt &lt;/td&gt;&lt;td&gt; &amp;gt; &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (int)x[&amp;quot;ID&amp;quot;] &amp;gt; 1) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; Leq &lt;/td&gt;&lt;td&gt; &amp;lt;= &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (int)x[&amp;quot;ID&amp;quot;] &amp;lt;= 1) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; Lt &lt;/td&gt;&lt;td&gt; &amp;lt; &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (int)x[&amp;quot;ID&amp;quot;] &amp;lt; 1) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; DateRangesOverlap &lt;/td&gt;&lt;td&gt; Camlex.DateRangesOverlap() &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; Camlex.DateRangesOverlap(x[&amp;quot;StartField&amp;quot;], x[&amp;quot;StopField&amp;quot;], x[&amp;quot;RecurrenceID&amp;quot;], (DataTypes.DateTime)Camlex.Month)) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; IsNotNull &lt;/td&gt;&lt;td&gt; != null &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; x[&amp;quot;Status&amp;quot;] != null) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; IsNull &lt;/td&gt;&lt;td&gt; == null &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; x[&amp;quot;Title&amp;quot;] == null) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; OrderBy	 &lt;/td&gt;&lt;td&gt; IQuery.OrderBy() &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (string)x[&amp;quot;Status&amp;quot;] == &amp;quot;Completed&amp;quot;).OrderBy(x =&amp;gt; x[&amp;quot;Modified&amp;quot;] as Camlex.Desc) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; GroupBy &lt;/td&gt;&lt;td&gt; IQuery.GroupBy &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (string)x[&amp;quot;Status&amp;quot;] == &amp;quot;Completed&amp;quot;).GroupBy(x =&amp;gt; new[] { x[&amp;quot;Modified&amp;quot;], x[&amp;quot;Editor&amp;quot;] }, true, 10) &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;IV. Non-constant expressions and runtime evaluation&lt;/b&gt;&lt;br /&gt;You can specify non-constant expressions both in indexer and in rvalue:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
x =&amp;gt; (Type)x[expr1] == expr2
&lt;/pre&gt;&lt;/div&gt;expr1 and expr2 are evaluated in runtime. If expr1 or expr2 is method call and it throws exception – then exception will be thrown when query will be evaluated. I.e. Camlex doesn’t catch exceptions when it evaluates expression in runtime. Notice also that expr1 (indexer’s parameter) should have string type. If expr1 cannot be casted to string then Camlex throws InvalidFieldNameForFieldRefException:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Scenario()
{
    Func&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; expr1 = () =&amp;gt; &lt;span style="color:Blue;"&gt;null&lt;/span&gt;;
    Func&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; expr2 = () =&amp;gt; 1;

    &lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
        Camlex.Query()
            .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)expr1()] == expr2()).ToString();
}
&lt;/pre&gt;&lt;/div&gt;Another interesting example – is when expr2 is null and operation is == or !=. In this case Camlex will translate &amp;lt;IsNull&amp;gt; and &amp;lt;IsNotNull&amp;gt; instead of &amp;lt;Eq&amp;gt; and &amp;lt;Neq&amp;gt; respectively:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Scenario()
{
    Func&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; expr1 = () =&amp;gt; &lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;;
    Func&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; expr2 = () =&amp;gt; &lt;span style="color:Blue;"&gt;null&lt;/span&gt;;

    &lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
        Camlex.Query()
            .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)expr1()] == expr2()).ToString();

    Console.WriteLine(caml);
}
&lt;/pre&gt;&lt;/div&gt;Will be translated into &amp;lt;IsNull&amp;gt;:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;While not-null rvalue:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Scenario()
{
    Func&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; expr1 = () =&amp;gt; &lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;;
    Func&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; expr2 = () =&amp;gt; &lt;span style="color:#A31515;"&gt;&amp;quot;Camlex&amp;quot;&lt;/span&gt;;

    &lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
        Camlex.Query()
            .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)expr1()] == expr2()).ToString();

    Console.WriteLine(caml);
}
&lt;/pre&gt;&lt;/div&gt;Will be translated into &amp;lt;Eq&amp;gt;:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Camlex&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;V. Dynamic filtering conditions&lt;/b&gt;&lt;br /&gt;This feature is added in 2.0 version. Often developers need to build CAML query based on predefined set of values. E.g. search items which have Ids contained in array {1, 2, 3} (analog of IN operator in SQL), or retrieve all items which contains one of the substrings (or all of them) in their Title { “hello”, “world” }. For this use case in version 2.0 were added 2 additional methods in IQuery interface WhereAll and WhereAny (by analogy with All and Any methods in Linq). The main difference is that WhereAll and WhereAny methods receive list of lambda expressions (or more accurate – IEnumerable) in contrast to Where method which receives single lambda expression.&lt;br /&gt;&lt;br /&gt;By analogy with Linq WhereAll method constructs CAML query for retrieving those items which satisfy all conditions specified in argument. I.e. WhereAll method contructs CAML query using &amp;lt;And&amp;gt; logical join. WhereAny method returns CAML query which can be used to retrieve items which satisfy at least one of specified conditions – it uses &amp;lt;Or&amp;gt; logical join. The general idea is to create list of lambda expressions and pass this list into Camlex. It will composite expressions using And or Or joins – so it will have one big expression as result and pass it in old Where method from 1.0 version.&lt;br /&gt;&lt;br /&gt;Notice that you can create various expressions – i.e. not necessary to create the same expression for each value. You can even provide different argument names in expressions – Camlex hasn&amp;#39;t restrictions to have the same argument names for all provided expressions. For example we need to select item which have ID = 1 and which Title = “Hello world”:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;ID&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Integer&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;1&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Hello world&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;It can be done using the following code:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; expressions = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt;();
expressions.Add(x =&amp;gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;] == 1);
expressions.Add(y =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)y[&lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;] == &lt;span style="color:#A31515;"&gt;&amp;quot;Hello world&amp;quot;&lt;/span&gt;);

&lt;span style="color:Blue;"&gt;string&lt;/span&gt; caml = Camlex.Query().WhereAll(expressions).ToString();
&lt;/pre&gt;&lt;/div&gt;I.e. Camlex may successfully translate queries with different arguments names (“x” and “y” in example above).&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>sadomovalex</author><pubDate>Mon, 03 Dec 2012 16:24:51 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20121203042451P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://camlex.codeplex.com/documentation?version=15</link><description>&lt;div class="wikidoc"&gt;Pages with future improvements - &lt;a href="http://camlex.codeplex.com/wikipage?title=Future%20improvements&amp;referringTitle=Documentation"&gt;Future improvements&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Additional Resources&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;Camlex Online &lt;a href="http://camlex-online.org"&gt;http://camlex-online.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Blog &lt;a href="http://sadomovalex.blogspot.com,http://sadomovalex.blogspot.com/search/label/Camlex.NET"&gt;http://sadomovalex.blogspot.com,http://sadomovalex.blogspot.com/search/label/Camlex.NET&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;b&gt;I. Camlex architecture and public interface&lt;/b&gt;&lt;br /&gt;Generally Camlex – is translator from lambda expression into CAML:&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=camlex&amp;DownloadId=102143" alt="architecture.jpg" title="architecture.jpg" /&gt;&lt;br /&gt;It receives expression like&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
x =&amp;gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;] == 1
&lt;/pre&gt;&lt;/div&gt;on input and translate it to valid CAML query. The exact signature of lambda expressions depends on method call of Camlex public interface. The most important interface in Camlex.NET assembly is IQuery and its implementation – Query class:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;interface&lt;/span&gt; IQuery
{
    IQuery Where(Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt; expr);
    IQuery WhereAll(IEnumerable&amp;lt;Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt; expressions);
    IQuery WhereAny(IEnumerable&amp;lt;Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt; expressions);
    IQuery OrderBy(Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt;&amp;gt; expr);
    IQuery OrderBy(Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;object&lt;/span&gt;[]&amp;gt;&amp;gt; expr);
    IQuery OrderBy(IEnumerable&amp;lt;Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt; expressions);
    IQuery GroupBy(Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt;&amp;gt; expr);
    IQuery GroupBy(Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;object&lt;/span&gt;[]&amp;gt;&amp;gt; expr, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;? collapse, &lt;span style="color:Blue;"&gt;int&lt;/span&gt;? groupLimit);
    IQuery GroupBy(Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt;&amp;gt; expr, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;? collapse, &lt;span style="color:Blue;"&gt;int&lt;/span&gt;? groupLimit);
    IQuery GroupBy(Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt;&amp;gt; expr, &lt;span style="color:Blue;"&gt;int&lt;/span&gt;? groupLimit);
    IQuery GroupBy(Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt;&amp;gt; expr, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;? collapse);
    XElement[] ToCaml(&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; includeQueryTag);
    &lt;span style="color:Blue;"&gt;string&lt;/span&gt; ToString();
    &lt;span style="color:Blue;"&gt;string&lt;/span&gt; ToString(&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; includeQueryTag);
}
&lt;/pre&gt;&lt;/div&gt;As you can see most methods returns itself – so fluent interfaces calls are available with Camlex:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;] != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
        .GroupBy(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;CreatedBy&amp;quot;&lt;/span&gt;]).ToString();
&lt;/pre&gt;&lt;/div&gt;Also notice that it has ToCaml() method which returns valid xml in array of XElement objects. It means that it can be simply customizable – for example you can use Linq to Xml or classes from System.Xml.Linq namespace in order to modify resulting query.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;II. Lambda expressions syntax&lt;/b&gt;&lt;br /&gt;Internally Camlex uses expression trees in order to parse lambda expressions and translate it to CAML. There are 2 types of syntaxes allowed in Camlex (here and below “x” – is a parameter for lambda expression with SPListItem data type defined inMicrosoft.Sharepoint.dll):
&lt;ol&gt;&lt;li&gt;Native syntax:&lt;/li&gt;&lt;/ol&gt;
&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
x =&amp;gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;] == 1
&lt;/pre&gt;&lt;/div&gt;I.e. you write integer rvalue and cast lvalue to int
&lt;ol&gt;&lt;li&gt;String based syntax:&lt;/li&gt;&lt;/ol&gt;
&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;] == (DataTypes.Integer)&lt;span style="color:#A31515;"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;In opposite with native syntax you write integer value in string representation and cast it to DataTypes.Integer class (helper class defined in Camlex.NET.dll)&lt;br /&gt;Two examples above are equivalent for Camlex. We introduced 2 types of syntaxes in order to be able to write queries with not only native .Net types (int, string, bool, DateTime), but also with Sharepoint data types (see &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spfieldtype.aspx"&gt;http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spfieldtype.aspx&lt;/a&gt;). You can easy mix these syntaxes and composite them via logical operations (&amp;amp;&amp;amp;, ||) in the same expression.&lt;br /&gt;The following schema shows how Camlex translates lambda expression with native into CAML query:&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=camlex&amp;DownloadId=102146" alt="mapping.jpg" title="mapping.jpg" /&gt;&lt;br /&gt;String based syntax is very similar except Camlex uses rvalue cast to DataTypes.Integer in order to determine type of value and checks that string representation contains valid value for this type.&lt;br /&gt;What happens if Camlex cannot parse lambda expression? As described above there are only 2 types of syntaxes (and their combination via logical &amp;amp;&amp;amp; and || operations) are valid for Camlex. If provided expression has different signature – then CamlexNET.NonSupportedExpressionException will be thrown.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;III. Supported operations&lt;/b&gt;&lt;br /&gt;The list of operations available in CAML query can be found on &lt;a href="http://msdn.microsoft.com/en-us/library/ms467521.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms467521.aspx&lt;/a&gt;. Camlex supports all of them. The following table shows mapping from C# operations into CAML with examples:&lt;br /&gt;&lt;table&gt;&lt;tr&gt;&lt;th&gt; CAML &lt;/th&gt;&lt;th&gt; C# &lt;/th&gt;&lt;th&gt; Example &lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; And &lt;/td&gt;&lt;td&gt; &amp;amp;&amp;amp; &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (string) x[&amp;quot;Status&amp;quot;] == &amp;quot;Completed&amp;quot; &amp;amp;&amp;amp; (int) x[&amp;quot;ID&amp;quot;] == 1) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; Or &lt;/td&gt;&lt;td&gt; ||  &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (string)x[&amp;quot;Status&amp;quot;] != &amp;quot;Completed&amp;quot; || x[&amp;quot;Status&amp;quot;] == null) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; BeginsWith &lt;/td&gt;&lt;td&gt; String. StartsWith() &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; ((string)x[&amp;quot;Title&amp;quot;]).StartsWith(&amp;quot;Camlex&amp;quot;)) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; Contains &lt;/td&gt;&lt;td&gt; String. Contains() &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; ((string)x[&amp;quot;Title &amp;quot;]).Contains(&amp;quot;Camlex&amp;quot;)) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; Eq &lt;/td&gt;&lt;td&gt; == &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (string)x[&amp;quot;Title&amp;quot;] == &amp;quot;Camlex&amp;quot;) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; Neq &lt;/td&gt;&lt;td&gt; != &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (string)x[&amp;quot;Status&amp;quot;] != &amp;quot;Completed&amp;quot;) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; Geq &lt;/td&gt;&lt;td&gt; &amp;gt;= &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (int)x[&amp;quot;ID&amp;quot;] &amp;gt;= 1) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; Gt &lt;/td&gt;&lt;td&gt; &amp;gt; &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (int)x[&amp;quot;ID&amp;quot;] &amp;gt; 1) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; Leq &lt;/td&gt;&lt;td&gt; &amp;lt;= &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (int)x[&amp;quot;ID&amp;quot;] &amp;lt;= 1) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; Lt &lt;/td&gt;&lt;td&gt; &amp;lt; &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (int)x[&amp;quot;ID&amp;quot;] &amp;lt; 1) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; DateRangesOverlap &lt;/td&gt;&lt;td&gt; Camlex.DateRangesOverlap() &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; Camlex.DateRangesOverlap(x[&amp;quot;StartField&amp;quot;], x[&amp;quot;StopField&amp;quot;], x[&amp;quot;RecurrenceID&amp;quot;], (DataTypes.DateTime)Camlex.Month)) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; IsNotNull &lt;/td&gt;&lt;td&gt; != null &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; x[&amp;quot;Status&amp;quot;] != null) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; IsNull &lt;/td&gt;&lt;td&gt; == null &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; x[&amp;quot;Title&amp;quot;] == null) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; OrderBy	 &lt;/td&gt;&lt;td&gt; IQuery.OrderBy() &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (string)x[&amp;quot;Status&amp;quot;] == &amp;quot;Completed&amp;quot;).OrderBy(x =&amp;gt; x[&amp;quot;Modified&amp;quot;] as Camlex.Desc) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; GroupBy &lt;/td&gt;&lt;td&gt; IQuery.GroupBy &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (string)x[&amp;quot;Status&amp;quot;] == &amp;quot;Completed&amp;quot;).GroupBy(x =&amp;gt; new[] { x[&amp;quot;Modified&amp;quot;], x[&amp;quot;Editor&amp;quot;] }, true, 10) &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;IV. Non-constant expressions and runtime evaluation&lt;/b&gt;&lt;br /&gt;You can specify non-constant expressions both in indexer and in rvalue:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
x =&amp;gt; (Type)x[expr1] == expr2
&lt;/pre&gt;&lt;/div&gt;expr1 and expr2 are evaluated in runtime. If expr1 or expr2 is method call and it throws exception – then exception will be thrown when query will be evaluated. I.e. Camlex doesn’t catch exceptions when it evaluates expression in runtime. Notice also that expr1 (indexer’s parameter) should have string type. If expr1 cannot be casted to string then Camlex throws InvalidFieldNameForFieldRefException:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Scenario()
{
    Func&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; expr1 = () =&amp;gt; &lt;span style="color:Blue;"&gt;null&lt;/span&gt;;
    Func&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; expr2 = () =&amp;gt; 1;

    &lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
        Camlex.Query()
            .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)expr1()] == expr2()).ToString();
}
&lt;/pre&gt;&lt;/div&gt;Another interesting example – is when expr2 is null and operation is == or !=. In this case Camlex will translate &amp;lt;IsNull&amp;gt; and &amp;lt;IsNotNull&amp;gt; instead of &amp;lt;Eq&amp;gt; and &amp;lt;Neq&amp;gt; respectively:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Scenario()
{
    Func&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; expr1 = () =&amp;gt; &lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;;
    Func&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; expr2 = () =&amp;gt; &lt;span style="color:Blue;"&gt;null&lt;/span&gt;;

    &lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
        Camlex.Query()
            .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)expr1()] == expr2()).ToString();

    Console.WriteLine(caml);
}
&lt;/pre&gt;&lt;/div&gt;Will be translated into &amp;lt;IsNull&amp;gt;:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;While not-null rvalue:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Scenario()
{
    Func&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; expr1 = () =&amp;gt; &lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;;
    Func&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; expr2 = () =&amp;gt; &lt;span style="color:#A31515;"&gt;&amp;quot;Camlex&amp;quot;&lt;/span&gt;;

    &lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
        Camlex.Query()
            .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)expr1()] == expr2()).ToString();

    Console.WriteLine(caml);
}
&lt;/pre&gt;&lt;/div&gt;Will be translated into &amp;lt;Eq&amp;gt;:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Camlex&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;V. Dynamic filtering conditions&lt;/b&gt;&lt;br /&gt;This feature is added in 2.0 version. Often developers need to build CAML query based on predefined set of values. E.g. search items which have Ids contained in array {1, 2, 3} (analog of IN operator in SQL), or retrieve all items which contains one of the substrings (or all of them) in their Title { “hello”, “world” }. For this use case in version 2.0 were added 2 additional methods in IQuery interface WhereAll and WhereAny (by analogy with All and Any methods in Linq). The main difference is that WhereAll and WhereAny methods receive list of lambda expressions (or more accurate – IEnumerable) in contrast to Where method which receives single lambda expression.&lt;br /&gt;&lt;br /&gt;By analogy with Linq WhereAll method constructs CAML query for retrieving those items which satisfy all conditions specified in argument. I.e. WhereAll method contructs CAML query using &amp;lt;And&amp;gt; logical join. WhereAny method returns CAML query which can be used to retrieve items which satisfy at least one of specified conditions – it uses &amp;lt;Or&amp;gt; logical join. The general idea is to create list of lambda expressions and pass this list into Camlex. It will composite expressions using And or Or joins – so it will have one big expression as result and pass it in old Where method from 1.0 version.&lt;br /&gt;&lt;br /&gt;Notice that you can create various expressions – i.e. not necessary to create the same expression for each value. You can even provide different argument names in expressions – Camlex hasn&amp;#39;t restrictions to have the same argument names for all provided expressions. For example we need to select item which have ID = 1 and which Title = “Hello world”:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;ID&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Integer&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;1&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Hello world&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;It can be done using the following code:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; expressions = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt;();
expressions.Add(x =&amp;gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;] == 1);
expressions.Add(y =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)y[&lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;] == &lt;span style="color:#A31515;"&gt;&amp;quot;Hello world&amp;quot;&lt;/span&gt;);

&lt;span style="color:Blue;"&gt;string&lt;/span&gt; caml = Camlex.Query().WhereAll(expressions).ToString();
&lt;/pre&gt;&lt;/div&gt;I.e. Camlex may successfully translate queries with different arguments names (“x” and “y” in example above).&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>sadomovalex</author><pubDate>Mon, 03 Dec 2012 16:24:24 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20121203042424P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://camlex.codeplex.com/documentation?version=14</link><description>&lt;div class="wikidoc"&gt;Pages with future improvements - &lt;a href="http://camlex.codeplex.com/wikipage?title=Future%20improvements&amp;referringTitle=Documentation"&gt;Future improvements&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Additional Resources&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;Camlex Online &lt;a href="http://camlex-online.org"&gt;http://camlex-online.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Blog &lt;a href="http://sadomovalex.blogspot.fi/search/label/Camlex.NET"&gt;http://sadomovalex.blogspot.fi/search/label/Camlex.NET&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;b&gt;I. Camlex architecture and public interface&lt;/b&gt;&lt;br /&gt;Generally Camlex – is translator from lambda expression into CAML:&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=camlex&amp;DownloadId=102143" alt="architecture.jpg" title="architecture.jpg" /&gt;&lt;br /&gt;It receives expression like&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
x =&amp;gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;] == 1
&lt;/pre&gt;&lt;/div&gt;on input and translate it to valid CAML query. The exact signature of lambda expressions depends on method call of Camlex public interface. The most important interface in Camlex.NET assembly is IQuery and its implementation – Query class:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;interface&lt;/span&gt; IQuery
{
    IQuery Where(Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt; expr);
    IQuery WhereAll(IEnumerable&amp;lt;Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt; expressions);
    IQuery WhereAny(IEnumerable&amp;lt;Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt; expressions);
    IQuery OrderBy(Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt;&amp;gt; expr);
    IQuery OrderBy(Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;object&lt;/span&gt;[]&amp;gt;&amp;gt; expr);
    IQuery OrderBy(IEnumerable&amp;lt;Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt; expressions);
    IQuery GroupBy(Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt;&amp;gt; expr);
    IQuery GroupBy(Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;object&lt;/span&gt;[]&amp;gt;&amp;gt; expr, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;? collapse, &lt;span style="color:Blue;"&gt;int&lt;/span&gt;? groupLimit);
    IQuery GroupBy(Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt;&amp;gt; expr, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;? collapse, &lt;span style="color:Blue;"&gt;int&lt;/span&gt;? groupLimit);
    IQuery GroupBy(Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt;&amp;gt; expr, &lt;span style="color:Blue;"&gt;int&lt;/span&gt;? groupLimit);
    IQuery GroupBy(Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt;&amp;gt; expr, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;? collapse);
    XElement[] ToCaml(&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; includeQueryTag);
    &lt;span style="color:Blue;"&gt;string&lt;/span&gt; ToString();
    &lt;span style="color:Blue;"&gt;string&lt;/span&gt; ToString(&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; includeQueryTag);
}
&lt;/pre&gt;&lt;/div&gt;As you can see most methods returns itself – so fluent interfaces calls are available with Camlex:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;] != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
        .GroupBy(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;CreatedBy&amp;quot;&lt;/span&gt;]).ToString();
&lt;/pre&gt;&lt;/div&gt;Also notice that it has ToCaml() method which returns valid xml in array of XElement objects. It means that it can be simply customizable – for example you can use Linq to Xml or classes from System.Xml.Linq namespace in order to modify resulting query.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;II. Lambda expressions syntax&lt;/b&gt;&lt;br /&gt;Internally Camlex uses expression trees in order to parse lambda expressions and translate it to CAML. There are 2 types of syntaxes allowed in Camlex (here and below “x” – is a parameter for lambda expression with SPListItem data type defined inMicrosoft.Sharepoint.dll):
&lt;ol&gt;&lt;li&gt;Native syntax:&lt;/li&gt;&lt;/ol&gt;
&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
x =&amp;gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;] == 1
&lt;/pre&gt;&lt;/div&gt;I.e. you write integer rvalue and cast lvalue to int
&lt;ol&gt;&lt;li&gt;String based syntax:&lt;/li&gt;&lt;/ol&gt;
&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;] == (DataTypes.Integer)&lt;span style="color:#A31515;"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;In opposite with native syntax you write integer value in string representation and cast it to DataTypes.Integer class (helper class defined in Camlex.NET.dll)&lt;br /&gt;Two examples above are equivalent for Camlex. We introduced 2 types of syntaxes in order to be able to write queries with not only native .Net types (int, string, bool, DateTime), but also with Sharepoint data types (see &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spfieldtype.aspx"&gt;http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spfieldtype.aspx&lt;/a&gt;). You can easy mix these syntaxes and composite them via logical operations (&amp;amp;&amp;amp;, ||) in the same expression.&lt;br /&gt;The following schema shows how Camlex translates lambda expression with native into CAML query:&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=camlex&amp;DownloadId=102146" alt="mapping.jpg" title="mapping.jpg" /&gt;&lt;br /&gt;String based syntax is very similar except Camlex uses rvalue cast to DataTypes.Integer in order to determine type of value and checks that string representation contains valid value for this type.&lt;br /&gt;What happens if Camlex cannot parse lambda expression? As described above there are only 2 types of syntaxes (and their combination via logical &amp;amp;&amp;amp; and || operations) are valid for Camlex. If provided expression has different signature – then CamlexNET.NonSupportedExpressionException will be thrown.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;III. Supported operations&lt;/b&gt;&lt;br /&gt;The list of operations available in CAML query can be found on &lt;a href="http://msdn.microsoft.com/en-us/library/ms467521.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms467521.aspx&lt;/a&gt;. Camlex supports all of them. The following table shows mapping from C# operations into CAML with examples:&lt;br /&gt;&lt;table&gt;&lt;tr&gt;&lt;th&gt; CAML &lt;/th&gt;&lt;th&gt; C# &lt;/th&gt;&lt;th&gt; Example &lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; And &lt;/td&gt;&lt;td&gt; &amp;amp;&amp;amp; &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (string) x[&amp;quot;Status&amp;quot;] == &amp;quot;Completed&amp;quot; &amp;amp;&amp;amp; (int) x[&amp;quot;ID&amp;quot;] == 1) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; Or &lt;/td&gt;&lt;td&gt; ||  &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (string)x[&amp;quot;Status&amp;quot;] != &amp;quot;Completed&amp;quot; || x[&amp;quot;Status&amp;quot;] == null) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; BeginsWith &lt;/td&gt;&lt;td&gt; String. StartsWith() &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; ((string)x[&amp;quot;Title&amp;quot;]).StartsWith(&amp;quot;Camlex&amp;quot;)) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; Contains &lt;/td&gt;&lt;td&gt; String. Contains() &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; ((string)x[&amp;quot;Title &amp;quot;]).Contains(&amp;quot;Camlex&amp;quot;)) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; Eq &lt;/td&gt;&lt;td&gt; == &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (string)x[&amp;quot;Title&amp;quot;] == &amp;quot;Camlex&amp;quot;) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; Neq &lt;/td&gt;&lt;td&gt; != &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (string)x[&amp;quot;Status&amp;quot;] != &amp;quot;Completed&amp;quot;) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; Geq &lt;/td&gt;&lt;td&gt; &amp;gt;= &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (int)x[&amp;quot;ID&amp;quot;] &amp;gt;= 1) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; Gt &lt;/td&gt;&lt;td&gt; &amp;gt; &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (int)x[&amp;quot;ID&amp;quot;] &amp;gt; 1) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; Leq &lt;/td&gt;&lt;td&gt; &amp;lt;= &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (int)x[&amp;quot;ID&amp;quot;] &amp;lt;= 1) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; Lt &lt;/td&gt;&lt;td&gt; &amp;lt; &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (int)x[&amp;quot;ID&amp;quot;] &amp;lt; 1) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; DateRangesOverlap &lt;/td&gt;&lt;td&gt; Camlex.DateRangesOverlap() &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; Camlex.DateRangesOverlap(x[&amp;quot;StartField&amp;quot;], x[&amp;quot;StopField&amp;quot;], x[&amp;quot;RecurrenceID&amp;quot;], (DataTypes.DateTime)Camlex.Month)) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; IsNotNull &lt;/td&gt;&lt;td&gt; != null &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; x[&amp;quot;Status&amp;quot;] != null) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; IsNull &lt;/td&gt;&lt;td&gt; == null &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; x[&amp;quot;Title&amp;quot;] == null) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; OrderBy	 &lt;/td&gt;&lt;td&gt; IQuery.OrderBy() &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (string)x[&amp;quot;Status&amp;quot;] == &amp;quot;Completed&amp;quot;).OrderBy(x =&amp;gt; x[&amp;quot;Modified&amp;quot;] as Camlex.Desc) &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; GroupBy &lt;/td&gt;&lt;td&gt; IQuery.GroupBy &lt;/td&gt;&lt;td&gt; Camlex.Query().Where(x =&amp;gt; (string)x[&amp;quot;Status&amp;quot;] == &amp;quot;Completed&amp;quot;).GroupBy(x =&amp;gt; new[] { x[&amp;quot;Modified&amp;quot;], x[&amp;quot;Editor&amp;quot;] }, true, 10) &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;IV. Non-constant expressions and runtime evaluation&lt;/b&gt;&lt;br /&gt;You can specify non-constant expressions both in indexer and in rvalue:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
x =&amp;gt; (Type)x[expr1] == expr2
&lt;/pre&gt;&lt;/div&gt;expr1 and expr2 are evaluated in runtime. If expr1 or expr2 is method call and it throws exception – then exception will be thrown when query will be evaluated. I.e. Camlex doesn’t catch exceptions when it evaluates expression in runtime. Notice also that expr1 (indexer’s parameter) should have string type. If expr1 cannot be casted to string then Camlex throws InvalidFieldNameForFieldRefException:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Scenario()
{
    Func&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; expr1 = () =&amp;gt; &lt;span style="color:Blue;"&gt;null&lt;/span&gt;;
    Func&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; expr2 = () =&amp;gt; 1;

    &lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
        Camlex.Query()
            .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)expr1()] == expr2()).ToString();
}
&lt;/pre&gt;&lt;/div&gt;Another interesting example – is when expr2 is null and operation is == or !=. In this case Camlex will translate &amp;lt;IsNull&amp;gt; and &amp;lt;IsNotNull&amp;gt; instead of &amp;lt;Eq&amp;gt; and &amp;lt;Neq&amp;gt; respectively:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Scenario()
{
    Func&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; expr1 = () =&amp;gt; &lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;;
    Func&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; expr2 = () =&amp;gt; &lt;span style="color:Blue;"&gt;null&lt;/span&gt;;

    &lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
        Camlex.Query()
            .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)expr1()] == expr2()).ToString();

    Console.WriteLine(caml);
}
&lt;/pre&gt;&lt;/div&gt;Will be translated into &amp;lt;IsNull&amp;gt;:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;While not-null rvalue:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Scenario()
{
    Func&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; expr1 = () =&amp;gt; &lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;;
    Func&amp;lt;&lt;span style="color:Blue;"&gt;object&lt;/span&gt;&amp;gt; expr2 = () =&amp;gt; &lt;span style="color:#A31515;"&gt;&amp;quot;Camlex&amp;quot;&lt;/span&gt;;

    &lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
        Camlex.Query()
            .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)expr1()] == expr2()).ToString();

    Console.WriteLine(caml);
}
&lt;/pre&gt;&lt;/div&gt;Will be translated into &amp;lt;Eq&amp;gt;:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Camlex&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;V. Dynamic filtering conditions&lt;/b&gt;&lt;br /&gt;This feature is added in 2.0 version. Often developers need to build CAML query based on predefined set of values. E.g. search items which have Ids contained in array {1, 2, 3} (analog of IN operator in SQL), or retrieve all items which contains one of the substrings (or all of them) in their Title { “hello”, “world” }. For this use case in version 2.0 were added 2 additional methods in IQuery interface WhereAll and WhereAny (by analogy with All and Any methods in Linq). The main difference is that WhereAll and WhereAny methods receive list of lambda expressions (or more accurate – IEnumerable) in contrast to Where method which receives single lambda expression.&lt;br /&gt;&lt;br /&gt;By analogy with Linq WhereAll method constructs CAML query for retrieving those items which satisfy all conditions specified in argument. I.e. WhereAll method contructs CAML query using &amp;lt;And&amp;gt; logical join. WhereAny method returns CAML query which can be used to retrieve items which satisfy at least one of specified conditions – it uses &amp;lt;Or&amp;gt; logical join. The general idea is to create list of lambda expressions and pass this list into Camlex. It will composite expressions using And or Or joins – so it will have one big expression as result and pass it in old Where method from 1.0 version.&lt;br /&gt;&lt;br /&gt;Notice that you can create various expressions – i.e. not necessary to create the same expression for each value. You can even provide different argument names in expressions – Camlex hasn&amp;#39;t restrictions to have the same argument names for all provided expressions. For example we need to select item which have ID = 1 and which Title = “Hello world”:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;ID&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Integer&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;1&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Hello world&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;It can be done using the following code:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; expressions = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt;();
expressions.Add(x =&amp;gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;] == 1);
expressions.Add(y =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)y[&lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;] == &lt;span style="color:#A31515;"&gt;&amp;quot;Hello world&amp;quot;&lt;/span&gt;);

&lt;span style="color:Blue;"&gt;string&lt;/span&gt; caml = Camlex.Query().WhereAll(expressions).ToString();
&lt;/pre&gt;&lt;/div&gt;I.e. Camlex may successfully translate queries with different arguments names (“x” and “y” in example above).&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>sadomovalex</author><pubDate>Mon, 03 Dec 2012 16:23:49 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20121203042349P</guid></item><item><title>Updated Wiki: Future improvements</title><link>http://camlex.codeplex.com/wikipage?title=Future improvements&amp;version=19</link><description>&lt;div class="wikidoc"&gt;The following are the features which are to be implemented in the next version of Camlex.NET project:&lt;br /&gt;&lt;del&gt;* Reverse engineering from pure CAML queries to C#-based Camlex queries&lt;/del&gt; -done&lt;br /&gt;&lt;del&gt;* Camlex.Net for Client OM - http://camlex.codeplex.com/workitem/13989&lt;/del&gt; -done
&lt;ul&gt;&lt;li&gt;Support for special forms for DATETIME values: &amp;lt;Value Type=&amp;quot;DateTime&amp;quot;&amp;gt;[Today + 7]&amp;lt;/Value&amp;gt; and &amp;lt;Value Type=&amp;quot;DateTime&amp;quot;&amp;gt;&amp;lt;Today /&amp;gt;&amp;lt;/Value&amp;gt; (http://camlex.codeplex.com/discussions/270483)&lt;/li&gt;&lt;/ul&gt;
&lt;del&gt;* Support for UserID in queries by user - see http://camlex.codeplex.com/discussions/264821&lt;/del&gt; - done
&lt;ul&gt;&lt;li&gt;Support for MEMBERSHIP nodes of CAML language&lt;/li&gt;
&lt;li&gt;Support for using Camlex.NET project in Silverlight applications&lt;/li&gt;
&lt;li&gt;Support for NULLABLE attribute of CAML language - &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsitedataquery.viewfields.aspx"&gt;http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsitedataquery.viewfields.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Support for Taxonomy fields (only for SharePoint 2010) - &lt;a href="http://msdn.microsoft.com/en-us/library/ff625182.aspx"&gt;http://msdn.microsoft.com/en-us/library/ff625182.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Support for float, double and decimal native data types&lt;/li&gt;
&lt;li&gt;Support more features available in CAML (e.g. &amp;lt;ProjectProperty&amp;gt; element inside &amp;lt;Value&amp;gt; tag)&lt;/li&gt;
&lt;li&gt;Compiled queries for better performance - see http://camlex.codeplex.com/discussions/330815&lt;/li&gt;
&lt;li&gt;No explicit comparisons for boolean fields: http://camlex.codeplex.com/workitem/13991?ProjectName=camlex&lt;/li&gt;&lt;/ul&gt;
&lt;del&gt;* Add conditions to existing string query - &lt;a href="http://camlex.codeplex.com/discussions/353158"&gt;http://camlex.codeplex.com/discussions/353158&lt;/a&gt;&lt;/del&gt; -done&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>sadomovalex</author><pubDate>Sat, 13 Oct 2012 07:58:06 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Future improvements 20121013075806A</guid></item><item><title>Updated Wiki: Home</title><link>http://camlex.codeplex.com/wikipage?version=33</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;Camlex.NET simplifies creating of CAML queries for Windows SharePoint Services by using expression trees.&lt;br /&gt;&lt;br /&gt;If you find Camlex.NET useful, you may support its development via &lt;a href="http&amp;#58;&amp;#47;&amp;#47;camlex-online.org"&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=camlex&amp;DownloadId=325346" alt="Donate" title="Donate" /&gt;&lt;/a&gt; button on the online version &lt;a href="http://camlex-online.org"&gt;http://camlex-online.org&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Client object model&lt;/b&gt;&lt;br /&gt;Version for Client object model is also available. It can be downloaded from here: &lt;a href="http://camlex.codeplex.com/releases/view/96198"&gt;Camlex.Client&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Online version&lt;/b&gt;&lt;br /&gt;You can convert your existing CAML queries to C# code for Camlex.NET using online service powered by Camlex: &lt;a href="http://camlex-online.org"&gt;http://camlex-online.org&lt;/a&gt;.&lt;br /&gt;&lt;a href="http&amp;#58;&amp;#47;&amp;#47;www.ndepend.com"&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=camlex&amp;DownloadId=392095" alt="powered&amp;#32;by&amp;#32;ndepend" title="powered&amp;#32;by&amp;#32;ndepend" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Installation Instructions&lt;/b&gt;&lt;br /&gt;In order to start working with Camlex.NET, please download and reference Camlex.NET.dll assembly in your project. After that you can create CAML queries using lambda expressions.&lt;br /&gt;Starting from version 3.0 you can install NuGet package for Camlex from online packages gallery:&lt;br /&gt;&lt;pre&gt;
Install-Package Camlex.NET.dll
&lt;/pre&gt;&lt;br /&gt;or Client version:&lt;br /&gt;&lt;pre&gt;
Install-Package Camlex.Client.dll
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Quick Start&lt;/b&gt;&lt;br /&gt;Camlex.NET is a new technique in Sharepoint development. It abstracts developers from syntax of CAML queries and helps them to concentrate on business tasks. With Camlex.NET developers could think about WHAT they need to do, instead of HOW to do it. It also brings the following advantages for Sharepoint developers:
&lt;ul&gt;&lt;li&gt;Compile time checking of expressions&lt;/li&gt;
&lt;li&gt;Natural and intuitive syntax using lambda expressions and fluent interfaces&lt;/li&gt;
&lt;li&gt;Support for native .Net types (int, strings, bool, DateTime, Guid) and operations (==, !=, &amp;gt;, &amp;lt;, etc)&lt;/li&gt;
&lt;li&gt;Support for Sharepoint-specific data types&lt;/li&gt;
&lt;li&gt;Ability to specify non-constant expressions inside filtering conditions (variables, method calls, etc)&lt;/li&gt;
&lt;li&gt;Fully customizable resulting query object&lt;/li&gt;
&lt;li&gt;Ability to build dynamic filtering conditions and join them using And/Or logical joins&lt;/li&gt;
&lt;li&gt;Search by lookup fields using LookupValue or LookupId&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;Now let&amp;#39;s consider some basic scenarios:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Scenario 1. Simple query&lt;/b&gt;&lt;br /&gt;Suppose that you need to select all items which have Status field set to Completed (following is the standard syntax of CAML):&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Status&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Completed&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;This query can be made with Camlex using the following syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;string&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;] == &lt;span style="color:#A31515;"&gt;&amp;quot;Completed&amp;quot;&lt;/span&gt;).ToString();
&lt;/pre&gt;&lt;/div&gt;Notice, other comparison operations like “&amp;lt;”, “&amp;lt;=”, “&amp;gt;”, “&amp;gt;=” are supported as well.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Scenario 2. Query with “and”/”or” conditions&lt;/b&gt;&lt;br /&gt;Suppose that you need to select items which have ProductID = 1000 and IsCompleted set to false or null. Syntax of appropriate standard CAML query follows:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;ProductID&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Integer&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;1000&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;IsCompleted&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Boolean&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;IsCompleted&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;With help of Camlex it could be converted using following natural syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;ProductID&amp;quot;&lt;/span&gt;] == 1000 &amp;amp;&amp;amp; ((&lt;span style="color:Blue;"&gt;bool&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;IsCompleted&amp;quot;&lt;/span&gt;] == &lt;span style="color:Blue;"&gt;false&lt;/span&gt; || x[&lt;span style="color:#A31515;"&gt;&amp;quot;IsCompleted&amp;quot;&lt;/span&gt;] == &lt;span style="color:Blue;"&gt;null&lt;/span&gt;))
            .ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 3. Query with DateTime&lt;/b&gt;&lt;br /&gt;Lets suppose that you need to retrieve items which were modified on 01-Jan-2010:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Modified&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;DateTime&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;2010-01-01T12:00:00Z&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Using Camlex you can simply write:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (DateTime)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Modified&amp;quot;&lt;/span&gt;] == &lt;span style="color:Blue;"&gt;new&lt;/span&gt; DateTime(2010, 01, 01)).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 4. Query with BeginsWith and Contains operations&lt;/b&gt;&lt;br /&gt;Consider the query that should return items which Title field starts with “Task” and Project field contains “Camlex”:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;BeginsWith&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Task&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;BeginsWith&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Project&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Camlex&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;You can achieve result using the following natural syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; ((&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;]).StartsWith(&lt;span style="color:#A31515;"&gt;&amp;quot;Task&amp;quot;&lt;/span&gt;) &amp;amp;&amp;amp; ((&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Project&amp;quot;&lt;/span&gt;]).Contains(&lt;span style="color:#A31515;"&gt;&amp;quot;Camlex&amp;quot;&lt;/span&gt;))
            .ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 5. Query with none C# native data types&lt;/b&gt;&lt;br /&gt;Suppose that you need to retrieve all items modified by Administrator:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Editor&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;User&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Administrator&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Notice that value is of Sharepoint-specific User data type. You can easily achieve the result with alternative string-based syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Editor&amp;quot;&lt;/span&gt;] == (DataTypes.User)&lt;span style="color:#A31515;"&gt;&amp;quot;Administrator&amp;quot;&lt;/span&gt;)
                .ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 6. Query with sorting (OrderBy)&lt;/b&gt;&lt;br /&gt;Suppose that you need to select all items which have ID &amp;gt;= 5 and the result should be sorted by Modified field:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Geq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;ID&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Integer&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;5&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Geq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;OrderBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Modified&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;OrderBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;You need to write the following Camlex expression in order to construct this query:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;] &amp;gt;= 5)
        .OrderBy(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Modified&amp;quot;&lt;/span&gt;]).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 7. Query with grouping (GroupBy)&lt;/b&gt;&lt;br /&gt;Suppose that we need to select items having not-null Status field and result set should be grouped by Author field:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNotNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Status&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNotNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;GroupBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Author&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;GroupBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;With Camlex you could simply rewrite it as:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;] != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
        .GroupBy(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Author&amp;quot;&lt;/span&gt;]).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 8. Query with non-constant expressions in lvalue and rvalue&lt;/b&gt;&lt;br /&gt;Non-constant expression gives you more control over CAML. Suppose that you need to select items depending on current locale: for English locale you need to select items which have TitleEng field set to “eng”; for non-English locale you need to select items which have Title field set to “non-eng”. I.e.:&lt;br /&gt;Query for English locale:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;TitleEng&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;eng&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Query for non-English locale:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;non-eng&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;It is not so hard with Camlex:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; isEng = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;; &lt;span style="color:Green;"&gt;// or false depending on Thread.CurrentThread.CurrentUICulture&lt;/span&gt;

&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[isEng ? &lt;span style="color:#A31515;"&gt;&amp;quot;TitleEng&amp;quot;&lt;/span&gt; : &lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;] == (isEng ? &lt;span style="color:#A31515;"&gt;&amp;quot;eng&amp;quot;&lt;/span&gt; : &lt;span style="color:#A31515;"&gt;&amp;quot;non-eng&amp;quot;&lt;/span&gt;)).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 9. Dynamic filtering conditions&lt;/b&gt;&lt;br /&gt;Starting with 2.0 version you can build dynamic filtering conditions and join them using WhereAll/WhereAny methods which use And/Or logical joins respectively.&lt;br /&gt;Suppose that we need to retrieve all items which contain at least one of the values {“hello”, “greeting”, “hi”} in Title field. I.e. we need to use the following CAML query:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;hello&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;greeting&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;hi&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;With Camlex.NET 2.0 we can create lambda expression for each condition and pass them into new WhereAny method:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// list of tokens&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; tokens = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:Blue;"&gt;string&lt;/span&gt;&amp;gt; { &lt;span style="color:#A31515;"&gt;&amp;quot;hello&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;greeting&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;hi&amp;quot;&lt;/span&gt; };
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; expressions = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt;();

&lt;span style="color:Green;"&gt;// create lambda expression for each token in list&lt;/span&gt;
&lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt; t &lt;span style="color:Blue;"&gt;in&lt;/span&gt; tokens)
{
    &lt;span style="color:Blue;"&gt;string&lt;/span&gt; token = t;
   expressions.Add(x =&amp;gt; ((&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;]).Contains(token));
}

&lt;span style="color:Green;"&gt;// prepare query&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml = Camlex.Query().WhereAny(expressions).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>sadomovalex</author><pubDate>Sat, 13 Oct 2012 07:48:01 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20121013074801A</guid></item><item><title>Updated Wiki: Home</title><link>http://camlex.codeplex.com/wikipage?version=32</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;Camlex.NET simplifies creating of CAML queries for Windows SharePoint Services by using expression trees.&lt;br /&gt;&lt;br /&gt;If you find Camlex.NET useful, you may support its development via &lt;a href="http&amp;#58;&amp;#47;&amp;#47;camlex-online.org"&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=camlex&amp;DownloadId=325346" alt="Donate" title="Donate" /&gt;&lt;/a&gt; button on the online version &lt;a href="http://camlex-online.org"&gt;http://camlex-online.org&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Client object model&lt;/b&gt;&lt;br /&gt;Version for Client object model is also available. It can be downloaded from here: &lt;a href="http://camlex.codeplex.com/releases/view/96198"&gt;Camlex.Client&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Online version&lt;/b&gt;&lt;br /&gt;You can convert your existing CAML queries to C# code for Camlex.NET using online service powered by Camlex: &lt;a href="http://camlex-online.org"&gt;http://camlex-online.org&lt;/a&gt;.&lt;br /&gt;&lt;a href="http&amp;#58;&amp;#47;&amp;#47;www.ndepend.com"&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=camlex&amp;DownloadId=392095" alt="powered&amp;#32;by&amp;#32;ndepend" title="powered&amp;#32;by&amp;#32;ndepend" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Installation Instructions&lt;/b&gt;&lt;br /&gt;In order to start working with Camlex.NET, please download and reference Camlex.NET.dll assembly in your project. After that you can create CAML queries using lambda expressions.&lt;br /&gt;Starting from version 3.0 you can install NuGet package for Camlex from online packages gallery:&lt;br /&gt;&lt;pre&gt;
Install-Package Camlex.NET.dll
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Quick Start&lt;/b&gt;&lt;br /&gt;Camlex.NET is a new technique in Sharepoint development. It abstracts developers from syntax of CAML queries and helps them to concentrate on business tasks. With Camlex.NET developers could think about WHAT they need to do, instead of HOW to do it. It also brings the following advantages for Sharepoint developers:
&lt;ul&gt;&lt;li&gt;Compile time checking of expressions&lt;/li&gt;
&lt;li&gt;Natural and intuitive syntax using lambda expressions and fluent interfaces&lt;/li&gt;
&lt;li&gt;Support for native .Net types (int, strings, bool, DateTime, Guid) and operations (==, !=, &amp;gt;, &amp;lt;, etc)&lt;/li&gt;
&lt;li&gt;Support for Sharepoint-specific data types&lt;/li&gt;
&lt;li&gt;Ability to specify non-constant expressions inside filtering conditions (variables, method calls, etc)&lt;/li&gt;
&lt;li&gt;Fully customizable resulting query object&lt;/li&gt;
&lt;li&gt;Ability to build dynamic filtering conditions and join them using And/Or logical joins&lt;/li&gt;
&lt;li&gt;Search by lookup fields using LookupValue or LookupId&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;Now let&amp;#39;s consider some basic scenarios:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Scenario 1. Simple query&lt;/b&gt;&lt;br /&gt;Suppose that you need to select all items which have Status field set to Completed (following is the standard syntax of CAML):&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Status&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Completed&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;This query can be made with Camlex using the following syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;string&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;] == &lt;span style="color:#A31515;"&gt;&amp;quot;Completed&amp;quot;&lt;/span&gt;).ToString();
&lt;/pre&gt;&lt;/div&gt;Notice, other comparison operations like “&amp;lt;”, “&amp;lt;=”, “&amp;gt;”, “&amp;gt;=” are supported as well.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Scenario 2. Query with “and”/”or” conditions&lt;/b&gt;&lt;br /&gt;Suppose that you need to select items which have ProductID = 1000 and IsCompleted set to false or null. Syntax of appropriate standard CAML query follows:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;ProductID&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Integer&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;1000&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;IsCompleted&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Boolean&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;IsCompleted&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;With help of Camlex it could be converted using following natural syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;ProductID&amp;quot;&lt;/span&gt;] == 1000 &amp;amp;&amp;amp; ((&lt;span style="color:Blue;"&gt;bool&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;IsCompleted&amp;quot;&lt;/span&gt;] == &lt;span style="color:Blue;"&gt;false&lt;/span&gt; || x[&lt;span style="color:#A31515;"&gt;&amp;quot;IsCompleted&amp;quot;&lt;/span&gt;] == &lt;span style="color:Blue;"&gt;null&lt;/span&gt;))
            .ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 3. Query with DateTime&lt;/b&gt;&lt;br /&gt;Lets suppose that you need to retrieve items which were modified on 01-Jan-2010:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Modified&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;DateTime&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;2010-01-01T12:00:00Z&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Using Camlex you can simply write:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (DateTime)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Modified&amp;quot;&lt;/span&gt;] == &lt;span style="color:Blue;"&gt;new&lt;/span&gt; DateTime(2010, 01, 01)).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 4. Query with BeginsWith and Contains operations&lt;/b&gt;&lt;br /&gt;Consider the query that should return items which Title field starts with “Task” and Project field contains “Camlex”:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;BeginsWith&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Task&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;BeginsWith&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Project&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Camlex&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;You can achieve result using the following natural syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; ((&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;]).StartsWith(&lt;span style="color:#A31515;"&gt;&amp;quot;Task&amp;quot;&lt;/span&gt;) &amp;amp;&amp;amp; ((&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Project&amp;quot;&lt;/span&gt;]).Contains(&lt;span style="color:#A31515;"&gt;&amp;quot;Camlex&amp;quot;&lt;/span&gt;))
            .ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 5. Query with none C# native data types&lt;/b&gt;&lt;br /&gt;Suppose that you need to retrieve all items modified by Administrator:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Editor&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;User&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Administrator&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Notice that value is of Sharepoint-specific User data type. You can easily achieve the result with alternative string-based syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Editor&amp;quot;&lt;/span&gt;] == (DataTypes.User)&lt;span style="color:#A31515;"&gt;&amp;quot;Administrator&amp;quot;&lt;/span&gt;)
                .ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 6. Query with sorting (OrderBy)&lt;/b&gt;&lt;br /&gt;Suppose that you need to select all items which have ID &amp;gt;= 5 and the result should be sorted by Modified field:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Geq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;ID&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Integer&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;5&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Geq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;OrderBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Modified&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;OrderBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;You need to write the following Camlex expression in order to construct this query:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;] &amp;gt;= 5)
        .OrderBy(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Modified&amp;quot;&lt;/span&gt;]).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 7. Query with grouping (GroupBy)&lt;/b&gt;&lt;br /&gt;Suppose that we need to select items having not-null Status field and result set should be grouped by Author field:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNotNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Status&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNotNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;GroupBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Author&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;GroupBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;With Camlex you could simply rewrite it as:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;] != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
        .GroupBy(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Author&amp;quot;&lt;/span&gt;]).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 8. Query with non-constant expressions in lvalue and rvalue&lt;/b&gt;&lt;br /&gt;Non-constant expression gives you more control over CAML. Suppose that you need to select items depending on current locale: for English locale you need to select items which have TitleEng field set to “eng”; for non-English locale you need to select items which have Title field set to “non-eng”. I.e.:&lt;br /&gt;Query for English locale:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;TitleEng&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;eng&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Query for non-English locale:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;non-eng&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;It is not so hard with Camlex:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; isEng = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;; &lt;span style="color:Green;"&gt;// or false depending on Thread.CurrentThread.CurrentUICulture&lt;/span&gt;

&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[isEng ? &lt;span style="color:#A31515;"&gt;&amp;quot;TitleEng&amp;quot;&lt;/span&gt; : &lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;] == (isEng ? &lt;span style="color:#A31515;"&gt;&amp;quot;eng&amp;quot;&lt;/span&gt; : &lt;span style="color:#A31515;"&gt;&amp;quot;non-eng&amp;quot;&lt;/span&gt;)).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 9. Dynamic filtering conditions&lt;/b&gt;&lt;br /&gt;Starting with 2.0 version you can build dynamic filtering conditions and join them using WhereAll/WhereAny methods which use And/Or logical joins respectively.&lt;br /&gt;Suppose that we need to retrieve all items which contain at least one of the values {“hello”, “greeting”, “hi”} in Title field. I.e. we need to use the following CAML query:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;hello&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;greeting&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;hi&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;With Camlex.NET 2.0 we can create lambda expression for each condition and pass them into new WhereAny method:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// list of tokens&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; tokens = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:Blue;"&gt;string&lt;/span&gt;&amp;gt; { &lt;span style="color:#A31515;"&gt;&amp;quot;hello&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;greeting&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;hi&amp;quot;&lt;/span&gt; };
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; expressions = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt;();

&lt;span style="color:Green;"&gt;// create lambda expression for each token in list&lt;/span&gt;
&lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt; t &lt;span style="color:Blue;"&gt;in&lt;/span&gt; tokens)
{
    &lt;span style="color:Blue;"&gt;string&lt;/span&gt; token = t;
   expressions.Add(x =&amp;gt; ((&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;]).Contains(token));
}

&lt;span style="color:Green;"&gt;// prepare query&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml = Camlex.Query().WhereAny(expressions).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>sadomovalex</author><pubDate>Sat, 13 Oct 2012 07:03:14 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20121013070314A</guid></item><item><title>Updated Wiki: Home</title><link>http://camlex.codeplex.com/wikipage?version=31</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;Camlex.NET simplifies creating of CAML queries for Windows SharePoint Services by using expression trees.&lt;br /&gt;&lt;br /&gt;If you find Camlex.NET useful, you may support its development via &lt;a href="http&amp;#58;&amp;#47;&amp;#47;camlex-online.org"&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=camlex&amp;DownloadId=325346" alt="Donate" title="Donate" /&gt;&lt;/a&gt; button on the online version &lt;a href="http://camlex-online.org"&gt;http://camlex-online.org&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Client object model version&lt;/b&gt;&lt;br /&gt;Version for Client object model is also available. It can be downloaded from here: &lt;a href="http://camlex.codeplex.com/releases/view/96198"&gt;Camlex.Client&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Online version&lt;/b&gt;&lt;br /&gt;You can convert your existing CAML queries to C# code for Camlex.NET using online service powered by Camlex: &lt;a href="http://camlex-online.org"&gt;http://camlex-online.org&lt;/a&gt;.&lt;br /&gt;&lt;a href="http&amp;#58;&amp;#47;&amp;#47;www.ndepend.com"&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=camlex&amp;DownloadId=392095" alt="powered&amp;#32;by&amp;#32;ndepend" title="powered&amp;#32;by&amp;#32;ndepend" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Installation Instructions&lt;/b&gt;&lt;br /&gt;In order to start working with Camlex.NET, please download and reference Camlex.NET.dll assembly in your project. After that you can create CAML queries using lambda expressions.&lt;br /&gt;Starting from version 3.0 you can install NuGet package for Camlex from online packages gallery:&lt;br /&gt;&lt;pre&gt;
Install-Package Camlex.NET.dll
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Quick Start&lt;/b&gt;&lt;br /&gt;Camlex.NET is a new technique in Sharepoint development. It abstracts developers from syntax of CAML queries and helps them to concentrate on business tasks. With Camlex.NET developers could think about WHAT they need to do, instead of HOW to do it. It also brings the following advantages for Sharepoint developers:
&lt;ul&gt;&lt;li&gt;Compile time checking of expressions&lt;/li&gt;
&lt;li&gt;Natural and intuitive syntax using lambda expressions and fluent interfaces&lt;/li&gt;
&lt;li&gt;Support for native .Net types (int, strings, bool, DateTime, Guid) and operations (==, !=, &amp;gt;, &amp;lt;, etc)&lt;/li&gt;
&lt;li&gt;Support for Sharepoint-specific data types&lt;/li&gt;
&lt;li&gt;Ability to specify non-constant expressions inside filtering conditions (variables, method calls, etc)&lt;/li&gt;
&lt;li&gt;Fully customizable resulting query object&lt;/li&gt;
&lt;li&gt;Ability to build dynamic filtering conditions and join them using And/Or logical joins&lt;/li&gt;
&lt;li&gt;Search by lookup fields using LookupValue or LookupId&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;Now let&amp;#39;s consider some basic scenarios:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Scenario 1. Simple query&lt;/b&gt;&lt;br /&gt;Suppose that you need to select all items which have Status field set to Completed (following is the standard syntax of CAML):&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Status&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Completed&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;This query can be made with Camlex using the following syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;string&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;] == &lt;span style="color:#A31515;"&gt;&amp;quot;Completed&amp;quot;&lt;/span&gt;).ToString();
&lt;/pre&gt;&lt;/div&gt;Notice, other comparison operations like “&amp;lt;”, “&amp;lt;=”, “&amp;gt;”, “&amp;gt;=” are supported as well.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Scenario 2. Query with “and”/”or” conditions&lt;/b&gt;&lt;br /&gt;Suppose that you need to select items which have ProductID = 1000 and IsCompleted set to false or null. Syntax of appropriate standard CAML query follows:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;ProductID&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Integer&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;1000&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;IsCompleted&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Boolean&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;IsCompleted&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;With help of Camlex it could be converted using following natural syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;ProductID&amp;quot;&lt;/span&gt;] == 1000 &amp;amp;&amp;amp; ((&lt;span style="color:Blue;"&gt;bool&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;IsCompleted&amp;quot;&lt;/span&gt;] == &lt;span style="color:Blue;"&gt;false&lt;/span&gt; || x[&lt;span style="color:#A31515;"&gt;&amp;quot;IsCompleted&amp;quot;&lt;/span&gt;] == &lt;span style="color:Blue;"&gt;null&lt;/span&gt;))
            .ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 3. Query with DateTime&lt;/b&gt;&lt;br /&gt;Lets suppose that you need to retrieve items which were modified on 01-Jan-2010:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Modified&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;DateTime&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;2010-01-01T12:00:00Z&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Using Camlex you can simply write:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (DateTime)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Modified&amp;quot;&lt;/span&gt;] == &lt;span style="color:Blue;"&gt;new&lt;/span&gt; DateTime(2010, 01, 01)).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 4. Query with BeginsWith and Contains operations&lt;/b&gt;&lt;br /&gt;Consider the query that should return items which Title field starts with “Task” and Project field contains “Camlex”:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;BeginsWith&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Task&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;BeginsWith&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Project&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Camlex&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;You can achieve result using the following natural syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; ((&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;]).StartsWith(&lt;span style="color:#A31515;"&gt;&amp;quot;Task&amp;quot;&lt;/span&gt;) &amp;amp;&amp;amp; ((&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Project&amp;quot;&lt;/span&gt;]).Contains(&lt;span style="color:#A31515;"&gt;&amp;quot;Camlex&amp;quot;&lt;/span&gt;))
            .ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 5. Query with none C# native data types&lt;/b&gt;&lt;br /&gt;Suppose that you need to retrieve all items modified by Administrator:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Editor&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;User&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Administrator&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Notice that value is of Sharepoint-specific User data type. You can easily achieve the result with alternative string-based syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Editor&amp;quot;&lt;/span&gt;] == (DataTypes.User)&lt;span style="color:#A31515;"&gt;&amp;quot;Administrator&amp;quot;&lt;/span&gt;)
                .ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 6. Query with sorting (OrderBy)&lt;/b&gt;&lt;br /&gt;Suppose that you need to select all items which have ID &amp;gt;= 5 and the result should be sorted by Modified field:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Geq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;ID&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Integer&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;5&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Geq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;OrderBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Modified&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;OrderBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;You need to write the following Camlex expression in order to construct this query:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;] &amp;gt;= 5)
        .OrderBy(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Modified&amp;quot;&lt;/span&gt;]).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 7. Query with grouping (GroupBy)&lt;/b&gt;&lt;br /&gt;Suppose that we need to select items having not-null Status field and result set should be grouped by Author field:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNotNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Status&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNotNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;GroupBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Author&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;GroupBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;With Camlex you could simply rewrite it as:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;] != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
        .GroupBy(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Author&amp;quot;&lt;/span&gt;]).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 8. Query with non-constant expressions in lvalue and rvalue&lt;/b&gt;&lt;br /&gt;Non-constant expression gives you more control over CAML. Suppose that you need to select items depending on current locale: for English locale you need to select items which have TitleEng field set to “eng”; for non-English locale you need to select items which have Title field set to “non-eng”. I.e.:&lt;br /&gt;Query for English locale:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;TitleEng&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;eng&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Query for non-English locale:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;non-eng&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;It is not so hard with Camlex:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; isEng = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;; &lt;span style="color:Green;"&gt;// or false depending on Thread.CurrentThread.CurrentUICulture&lt;/span&gt;

&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[isEng ? &lt;span style="color:#A31515;"&gt;&amp;quot;TitleEng&amp;quot;&lt;/span&gt; : &lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;] == (isEng ? &lt;span style="color:#A31515;"&gt;&amp;quot;eng&amp;quot;&lt;/span&gt; : &lt;span style="color:#A31515;"&gt;&amp;quot;non-eng&amp;quot;&lt;/span&gt;)).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 9. Dynamic filtering conditions&lt;/b&gt;&lt;br /&gt;Starting with 2.0 version you can build dynamic filtering conditions and join them using WhereAll/WhereAny methods which use And/Or logical joins respectively.&lt;br /&gt;Suppose that we need to retrieve all items which contain at least one of the values {“hello”, “greeting”, “hi”} in Title field. I.e. we need to use the following CAML query:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;hello&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;greeting&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;hi&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;With Camlex.NET 2.0 we can create lambda expression for each condition and pass them into new WhereAny method:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// list of tokens&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; tokens = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:Blue;"&gt;string&lt;/span&gt;&amp;gt; { &lt;span style="color:#A31515;"&gt;&amp;quot;hello&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;greeting&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;hi&amp;quot;&lt;/span&gt; };
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; expressions = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt;();

&lt;span style="color:Green;"&gt;// create lambda expression for each token in list&lt;/span&gt;
&lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt; t &lt;span style="color:Blue;"&gt;in&lt;/span&gt; tokens)
{
    &lt;span style="color:Blue;"&gt;string&lt;/span&gt; token = t;
   expressions.Add(x =&amp;gt; ((&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;]).Contains(token));
}

&lt;span style="color:Green;"&gt;// prepare query&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml = Camlex.Query().WhereAny(expressions).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>sadomovalex</author><pubDate>Sat, 13 Oct 2012 06:57:39 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20121013065739A</guid></item><item><title>Updated Wiki: Home</title><link>http://camlex.codeplex.com/wikipage?version=30</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;Camlex.NET simplifies creating of CAML queries for Windows SharePoint Services by using expression trees.&lt;br /&gt;&lt;br /&gt;If you find Camlex.NET useful, you may support its development via &lt;a href="http&amp;#58;&amp;#47;&amp;#47;camlex-online.org"&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=camlex&amp;DownloadId=325346" alt="Donate" title="Donate" /&gt;&lt;/a&gt; button on the online version &lt;a href="http://camlex-online.org"&gt;http://camlex-online.org&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Online version&lt;/b&gt;&lt;br /&gt;You can convert your existing CAML queries to C# code for Camlex.NET using online service powered by Camlex: &lt;a href="http://camlex-online.org"&gt;http://camlex-online.org&lt;/a&gt;.&lt;br /&gt;&lt;a href="http&amp;#58;&amp;#47;&amp;#47;www.ndepend.com"&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=camlex&amp;DownloadId=392095" alt="powered&amp;#32;by&amp;#32;ndepend" title="powered&amp;#32;by&amp;#32;ndepend" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Installation Instructions&lt;/b&gt;&lt;br /&gt;In order to start working with Camlex.NET, please download and reference Camlex.NET.dll assembly in your project. After that you can create CAML queries using lambda expressions.&lt;br /&gt;Starting from version 3.0 you can install NuGet package for Camlex from online packages gallery:&lt;br /&gt;&lt;pre&gt;
Install-Package Camlex.NET.dll
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Quick Start&lt;/b&gt;&lt;br /&gt;Camlex.NET is a new technique in Sharepoint development. It abstracts developers from syntax of CAML queries and helps them to concentrate on business tasks. With Camlex.NET developers could think about WHAT they need to do, instead of HOW to do it. It also brings the following advantages for Sharepoint developers:
&lt;ul&gt;&lt;li&gt;Compile time checking of expressions&lt;/li&gt;
&lt;li&gt;Natural and intuitive syntax using lambda expressions and fluent interfaces&lt;/li&gt;
&lt;li&gt;Support for native .Net types (int, strings, bool, DateTime, Guid) and operations (==, !=, &amp;gt;, &amp;lt;, etc)&lt;/li&gt;
&lt;li&gt;Support for Sharepoint-specific data types&lt;/li&gt;
&lt;li&gt;Ability to specify non-constant expressions inside filtering conditions (variables, method calls, etc)&lt;/li&gt;
&lt;li&gt;Fully customizable resulting query object&lt;/li&gt;
&lt;li&gt;Ability to build dynamic filtering conditions and join them using And/Or logical joins&lt;/li&gt;
&lt;li&gt;Search by lookup fields using LookupValue or LookupId&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;Now let&amp;#39;s consider some basic scenarios:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Scenario 1. Simple query&lt;/b&gt;&lt;br /&gt;Suppose that you need to select all items which have Status field set to Completed (following is the standard syntax of CAML):&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Status&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Completed&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;This query can be made with Camlex using the following syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;string&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;] == &lt;span style="color:#A31515;"&gt;&amp;quot;Completed&amp;quot;&lt;/span&gt;).ToString();
&lt;/pre&gt;&lt;/div&gt;Notice, other comparison operations like “&amp;lt;”, “&amp;lt;=”, “&amp;gt;”, “&amp;gt;=” are supported as well.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Scenario 2. Query with “and”/”or” conditions&lt;/b&gt;&lt;br /&gt;Suppose that you need to select items which have ProductID = 1000 and IsCompleted set to false or null. Syntax of appropriate standard CAML query follows:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;ProductID&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Integer&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;1000&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;IsCompleted&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Boolean&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;IsCompleted&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;With help of Camlex it could be converted using following natural syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;ProductID&amp;quot;&lt;/span&gt;] == 1000 &amp;amp;&amp;amp; ((&lt;span style="color:Blue;"&gt;bool&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;IsCompleted&amp;quot;&lt;/span&gt;] == &lt;span style="color:Blue;"&gt;false&lt;/span&gt; || x[&lt;span style="color:#A31515;"&gt;&amp;quot;IsCompleted&amp;quot;&lt;/span&gt;] == &lt;span style="color:Blue;"&gt;null&lt;/span&gt;))
            .ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 3. Query with DateTime&lt;/b&gt;&lt;br /&gt;Lets suppose that you need to retrieve items which were modified on 01-Jan-2010:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Modified&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;DateTime&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;2010-01-01T12:00:00Z&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Using Camlex you can simply write:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (DateTime)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Modified&amp;quot;&lt;/span&gt;] == &lt;span style="color:Blue;"&gt;new&lt;/span&gt; DateTime(2010, 01, 01)).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 4. Query with BeginsWith and Contains operations&lt;/b&gt;&lt;br /&gt;Consider the query that should return items which Title field starts with “Task” and Project field contains “Camlex”:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;BeginsWith&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Task&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;BeginsWith&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Project&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Camlex&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;You can achieve result using the following natural syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; ((&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;]).StartsWith(&lt;span style="color:#A31515;"&gt;&amp;quot;Task&amp;quot;&lt;/span&gt;) &amp;amp;&amp;amp; ((&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Project&amp;quot;&lt;/span&gt;]).Contains(&lt;span style="color:#A31515;"&gt;&amp;quot;Camlex&amp;quot;&lt;/span&gt;))
            .ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 5. Query with none C# native data types&lt;/b&gt;&lt;br /&gt;Suppose that you need to retrieve all items modified by Administrator:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Editor&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;User&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Administrator&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Notice that value is of Sharepoint-specific User data type. You can easily achieve the result with alternative string-based syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Editor&amp;quot;&lt;/span&gt;] == (DataTypes.User)&lt;span style="color:#A31515;"&gt;&amp;quot;Administrator&amp;quot;&lt;/span&gt;)
                .ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 6. Query with sorting (OrderBy)&lt;/b&gt;&lt;br /&gt;Suppose that you need to select all items which have ID &amp;gt;= 5 and the result should be sorted by Modified field:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Geq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;ID&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Integer&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;5&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Geq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;OrderBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Modified&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;OrderBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;You need to write the following Camlex expression in order to construct this query:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;] &amp;gt;= 5)
        .OrderBy(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Modified&amp;quot;&lt;/span&gt;]).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 7. Query with grouping (GroupBy)&lt;/b&gt;&lt;br /&gt;Suppose that we need to select items having not-null Status field and result set should be grouped by Author field:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNotNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Status&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNotNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;GroupBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Author&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;GroupBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;With Camlex you could simply rewrite it as:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;] != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
        .GroupBy(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Author&amp;quot;&lt;/span&gt;]).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 8. Query with non-constant expressions in lvalue and rvalue&lt;/b&gt;&lt;br /&gt;Non-constant expression gives you more control over CAML. Suppose that you need to select items depending on current locale: for English locale you need to select items which have TitleEng field set to “eng”; for non-English locale you need to select items which have Title field set to “non-eng”. I.e.:&lt;br /&gt;Query for English locale:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;TitleEng&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;eng&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Query for non-English locale:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;non-eng&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;It is not so hard with Camlex:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; isEng = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;; &lt;span style="color:Green;"&gt;// or false depending on Thread.CurrentThread.CurrentUICulture&lt;/span&gt;

&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[isEng ? &lt;span style="color:#A31515;"&gt;&amp;quot;TitleEng&amp;quot;&lt;/span&gt; : &lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;] == (isEng ? &lt;span style="color:#A31515;"&gt;&amp;quot;eng&amp;quot;&lt;/span&gt; : &lt;span style="color:#A31515;"&gt;&amp;quot;non-eng&amp;quot;&lt;/span&gt;)).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 9. Dynamic filtering conditions&lt;/b&gt;&lt;br /&gt;Starting with 2.0 version you can build dynamic filtering conditions and join them using WhereAll/WhereAny methods which use And/Or logical joins respectively.&lt;br /&gt;Suppose that we need to retrieve all items which contain at least one of the values {“hello”, “greeting”, “hi”} in Title field. I.e. we need to use the following CAML query:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;hello&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;greeting&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;hi&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;With Camlex.NET 2.0 we can create lambda expression for each condition and pass them into new WhereAny method:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// list of tokens&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; tokens = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:Blue;"&gt;string&lt;/span&gt;&amp;gt; { &lt;span style="color:#A31515;"&gt;&amp;quot;hello&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;greeting&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;hi&amp;quot;&lt;/span&gt; };
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; expressions = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt;();

&lt;span style="color:Green;"&gt;// create lambda expression for each token in list&lt;/span&gt;
&lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt; t &lt;span style="color:Blue;"&gt;in&lt;/span&gt; tokens)
{
    &lt;span style="color:Blue;"&gt;string&lt;/span&gt; token = t;
   expressions.Add(x =&amp;gt; ((&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;]).Contains(token));
}

&lt;span style="color:Green;"&gt;// prepare query&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml = Camlex.Query().WhereAny(expressions).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>sadomovalex</author><pubDate>Wed, 20 Jun 2012 19:42:35 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20120620074235P</guid></item><item><title>Updated Wiki: Home</title><link>http://camlex.codeplex.com/wikipage?version=29</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;Camlex.NET simplifies creating of CAML queries for Windows SharePoint Services by using expression trees.&lt;br /&gt;&lt;br /&gt;If you find Camlex.NET useful, you may support its development via &lt;a href="http&amp;#58;&amp;#47;&amp;#47;camlex-online.org"&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=camlex&amp;DownloadId=325346" alt="Donate" title="Donate" /&gt;&lt;/a&gt; button on the online version &lt;a href="http://camlex-online.org"&gt;http://camlex-online.org&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Online version&lt;/b&gt;&lt;br /&gt;You can convert your existing CAML queries to C# code for Camlex.NET using online service powered by Camlex: &lt;a href="http://camlex-online.org"&gt;http://camlex-online.org&lt;/a&gt;.&lt;br /&gt;&lt;a href="http&amp;#58;&amp;#47;&amp;#47;www.ndepend.com"&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=camlex&amp;DownloadId=392095" alt="powered&amp;#32;by&amp;#32;ndepend" title="powered&amp;#32;by&amp;#32;ndepend" /&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Installation Instructions&lt;/b&gt;&lt;br /&gt;In order to start working with Camlex.NET, please download and reference Camlex.NET.dll assembly in your project. After that you can create CAML queries using lambda expressions.&lt;br /&gt;Starting from version 3.0 you can install NuGet package for Camlex from online packages gallery:&lt;br /&gt;&lt;pre&gt;
Install-Package Camlex.NET.dll
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Quick Start&lt;/b&gt;&lt;br /&gt;Camlex.NET is a new technique in Sharepoint development. It abstracts developers from syntax of CAML queries and helps them to concentrate on business tasks. With Camlex.NET developers could think about WHAT they need to do, instead of HOW to do it. It also brings the following advantages for Sharepoint developers:
&lt;ul&gt;&lt;li&gt;Compile time checking of expressions&lt;/li&gt;
&lt;li&gt;Natural and intuitive syntax using lambda expressions and fluent interfaces&lt;/li&gt;
&lt;li&gt;Support for native .Net types (int, strings, bool, DateTime, Guid) and operations (==, !=, &amp;gt;, &amp;lt;, etc)&lt;/li&gt;
&lt;li&gt;Support for Sharepoint-specific data types&lt;/li&gt;
&lt;li&gt;Ability to specify non-constant expressions inside filtering conditions (variables, method calls, etc)&lt;/li&gt;
&lt;li&gt;Fully customizable resulting query object&lt;/li&gt;
&lt;li&gt;Ability to build dynamic filtering conditions and join them using And/Or logical joins&lt;/li&gt;
&lt;li&gt;Search by lookup fields using LookupValue or LookupId&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;Now let&amp;#39;s consider some basic scenarios:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Scenario 1. Simple query&lt;/b&gt;&lt;br /&gt;Suppose that you need to select all items which have Status field set to Completed (following is the standard syntax of CAML):&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Status&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Completed&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;This query can be made with Camlex using the following syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;string&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;] == &lt;span style="color:#A31515;"&gt;&amp;quot;Completed&amp;quot;&lt;/span&gt;).ToString();
&lt;/pre&gt;&lt;/div&gt;Notice, other comparison operations like “&amp;lt;”, “&amp;lt;=”, “&amp;gt;”, “&amp;gt;=” are supported as well.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Scenario 2. Query with “and”/”or” conditions&lt;/b&gt;&lt;br /&gt;Suppose that you need to select items which have ProductID = 1000 and IsCompleted set to false or null. Syntax of appropriate standard CAML query follows:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;ProductID&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Integer&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;1000&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;IsCompleted&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Boolean&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;IsCompleted&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;With help of Camlex it could be converted using following natural syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;ProductID&amp;quot;&lt;/span&gt;] == 1000 &amp;amp;&amp;amp; ((&lt;span style="color:Blue;"&gt;bool&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;IsCompleted&amp;quot;&lt;/span&gt;] == &lt;span style="color:Blue;"&gt;false&lt;/span&gt; || x[&lt;span style="color:#A31515;"&gt;&amp;quot;IsCompleted&amp;quot;&lt;/span&gt;] == &lt;span style="color:Blue;"&gt;null&lt;/span&gt;))
            .ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 3. Query with DateTime&lt;/b&gt;&lt;br /&gt;Lets suppose that you need to retrieve items which were modified on 01-Jan-2010:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Modified&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;DateTime&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;2010-01-01T12:00:00Z&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Using Camlex you can simply write:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (DateTime)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Modified&amp;quot;&lt;/span&gt;] == &lt;span style="color:Blue;"&gt;new&lt;/span&gt; DateTime(2010, 01, 01)).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 4. Query with BeginsWith and Contains operations&lt;/b&gt;&lt;br /&gt;Consider the query that should return items which Title field starts with “Task” and Project field contains “Camlex”:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;BeginsWith&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Task&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;BeginsWith&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Project&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Camlex&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;You can achieve result using the following natural syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; ((&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;]).StartsWith(&lt;span style="color:#A31515;"&gt;&amp;quot;Task&amp;quot;&lt;/span&gt;) &amp;amp;&amp;amp; ((&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Project&amp;quot;&lt;/span&gt;]).Contains(&lt;span style="color:#A31515;"&gt;&amp;quot;Camlex&amp;quot;&lt;/span&gt;))
            .ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 5. Query with none C# native data types&lt;/b&gt;&lt;br /&gt;Suppose that you need to retrieve all items modified by Administrator:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Editor&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;User&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Administrator&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Notice that value is of Sharepoint-specific User data type. You can easily achieve the result with alternative string-based syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Editor&amp;quot;&lt;/span&gt;] == (DataTypes.User)&lt;span style="color:#A31515;"&gt;&amp;quot;Administrator&amp;quot;&lt;/span&gt;)
                .ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 6. Query with sorting (OrderBy)&lt;/b&gt;&lt;br /&gt;Suppose that you need to select all items which have ID &amp;gt;= 5 and the result should be sorted by Modified field:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Geq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;ID&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Integer&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;5&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Geq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;OrderBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Modified&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;OrderBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;You need to write the following Camlex expression in order to construct this query:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;] &amp;gt;= 5)
        .OrderBy(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Modified&amp;quot;&lt;/span&gt;]).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 7. Query with grouping (GroupBy)&lt;/b&gt;&lt;br /&gt;Suppose that we need to select items having not-null Status field and result set should be grouped by Author field:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNotNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Status&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNotNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;GroupBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Author&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;GroupBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;With Camlex you could simply rewrite it as:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;] != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
        .GroupBy(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Author&amp;quot;&lt;/span&gt;]).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 8. Query with non-constant expressions in lvalue and rvalue&lt;/b&gt;&lt;br /&gt;Non-constant expression gives you more control over CAML. Suppose that you need to select items depending on current locale: for English locale you need to select items which have TitleEng field set to “eng”; for non-English locale you need to select items which have Title field set to “non-eng”. I.e.:&lt;br /&gt;Query for English locale:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;TitleEng&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;eng&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Query for non-English locale:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;non-eng&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;It is not so hard with Camlex:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; isEng = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;; &lt;span style="color:Green;"&gt;// or false depending on Thread.CurrentThread.CurrentUICulture&lt;/span&gt;

&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[isEng ? &lt;span style="color:#A31515;"&gt;&amp;quot;TitleEng&amp;quot;&lt;/span&gt; : &lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;] == (isEng ? &lt;span style="color:#A31515;"&gt;&amp;quot;eng&amp;quot;&lt;/span&gt; : &lt;span style="color:#A31515;"&gt;&amp;quot;non-eng&amp;quot;&lt;/span&gt;)).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 9. Dynamic filtering conditions&lt;/b&gt;&lt;br /&gt;Starting with 2.0 version you can build dynamic filtering conditions and join them using WhereAll/WhereAny methods which use And/Or logical joins respectively.&lt;br /&gt;Suppose that we need to retrieve all items which contain at least one of the values {“hello”, “greeting”, “hi”} in Title field. I.e. we need to use the following CAML query:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;hello&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;greeting&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;hi&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;With Camlex.NET 2.0 we can create lambda expression for each condition and pass them into new WhereAny method:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// list of tokens&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; tokens = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:Blue;"&gt;string&lt;/span&gt;&amp;gt; { &lt;span style="color:#A31515;"&gt;&amp;quot;hello&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;greeting&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;hi&amp;quot;&lt;/span&gt; };
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; expressions = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt;();

&lt;span style="color:Green;"&gt;// create lambda expression for each token in list&lt;/span&gt;
&lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt; t &lt;span style="color:Blue;"&gt;in&lt;/span&gt; tokens)
{
    &lt;span style="color:Blue;"&gt;string&lt;/span&gt; token = t;
   expressions.Add(x =&amp;gt; ((&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;]).Contains(token));
}

&lt;span style="color:Green;"&gt;// prepare query&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml = Camlex.Query().WhereAny(expressions).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>sadomovalex</author><pubDate>Wed, 20 Jun 2012 19:41:29 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20120620074129P</guid></item><item><title>Updated Wiki: Future improvements</title><link>http://camlex.codeplex.com/wikipage?title=Future improvements&amp;version=18</link><description>&lt;div class="wikidoc"&gt;The following are the features which are to be implemented in the next version of Camlex.NET project:&lt;br /&gt;&lt;del&gt;* Reverse engineering from pure CAML queries to C#-based Camlex queries&lt;/del&gt; -done
&lt;ul&gt;&lt;li&gt;Camlex.Net for Client OM - http://camlex.codeplex.com/workitem/13989&lt;/li&gt;
&lt;li&gt;Support for special forms for DATETIME values: &amp;lt;Value Type=&amp;quot;DateTime&amp;quot;&amp;gt;[Today + 7]&amp;lt;/Value&amp;gt; and &amp;lt;Value Type=&amp;quot;DateTime&amp;quot;&amp;gt;&amp;lt;Today /&amp;gt;&amp;lt;/Value&amp;gt; (http://camlex.codeplex.com/discussions/270483)&lt;/li&gt;&lt;/ul&gt;
&lt;del&gt;* Support for UserID in queries by user - see http://camlex.codeplex.com/discussions/264821&lt;/del&gt; - done
&lt;ul&gt;&lt;li&gt;Support for MEMBERSHIP nodes of CAML language&lt;/li&gt;
&lt;li&gt;Support for using Camlex.NET project in Silverlight applications&lt;/li&gt;
&lt;li&gt;Support for NULLABLE attribute of CAML language - &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsitedataquery.viewfields.aspx"&gt;http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsitedataquery.viewfields.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Support for Taxonomy fields (only for SharePoint 2010) - &lt;a href="http://msdn.microsoft.com/en-us/library/ff625182.aspx"&gt;http://msdn.microsoft.com/en-us/library/ff625182.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Support for float, double and decimal native data types&lt;/li&gt;
&lt;li&gt;Support more features available in CAML (e.g. &amp;lt;ProjectProperty&amp;gt; element inside &amp;lt;Value&amp;gt; tag)&lt;/li&gt;
&lt;li&gt;Compiled queries for better performance - see http://camlex.codeplex.com/discussions/330815&lt;/li&gt;
&lt;li&gt;No explicit comparisons for boolean fields: http://camlex.codeplex.com/workitem/13991?ProjectName=camlex&lt;/li&gt;&lt;/ul&gt;
&lt;del&gt;* Add conditions to existing string query - &lt;a href="http://camlex.codeplex.com/discussions/353158"&gt;http://camlex.codeplex.com/discussions/353158&lt;/a&gt;&lt;/del&gt; -done&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>sadomovalex</author><pubDate>Tue, 12 Jun 2012 22:25:29 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Future improvements 20120612102529P</guid></item><item><title>Updated Wiki: Future improvements</title><link>http://camlex.codeplex.com/wikipage?title=Future improvements&amp;version=17</link><description>&lt;div class="wikidoc"&gt;The following are the features which are to be implemented in the next version of Camlex.NET project:&lt;br /&gt;&lt;del&gt;* Reverse engineering from pure CAML queries to C#-based Camlex queries&lt;/del&gt; -done
&lt;ul&gt;&lt;li&gt;Camlex.Net for Client OM - http://camlex.codeplex.com/workitem/13989&lt;/li&gt;
&lt;li&gt;Support for special forms for DATETIME values: &amp;lt;Value Type=&amp;quot;DateTime&amp;quot;&amp;gt;[Today + 7]&amp;lt;/Value&amp;gt; and &amp;lt;Value Type=&amp;quot;DateTime&amp;quot;&amp;gt;&amp;lt;Today /&amp;gt;&amp;lt;/Value&amp;gt; (http://camlex.codeplex.com/discussions/270483)&lt;/li&gt;&lt;/ul&gt;
&lt;del&gt;* Support for UserID in queries by user - see http://camlex.codeplex.com/discussions/264821&lt;/del&gt; - done
&lt;ul&gt;&lt;li&gt;Support for MEMBERSHIP nodes of CAML language&lt;/li&gt;
&lt;li&gt;Support for using Camlex.NET project in Silverlight applications&lt;/li&gt;
&lt;li&gt;Support for NULLABLE attribute of CAML language - &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsitedataquery.viewfields.aspx"&gt;http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsitedataquery.viewfields.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Support for Taxonomy fields (only for SharePoint 2010) - &lt;a href="http://msdn.microsoft.com/en-us/library/ff625182.aspx"&gt;http://msdn.microsoft.com/en-us/library/ff625182.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Support for float, double and decimal native data types&lt;/li&gt;
&lt;li&gt;Support more features available in CAML (e.g. &amp;lt;ProjectProperty&amp;gt; element inside &amp;lt;Value&amp;gt; tag)&lt;/li&gt;
&lt;li&gt;Compiled queries for better performance - see http://camlex.codeplex.com/discussions/330815&lt;/li&gt;
&lt;li&gt;No explicit comparisons for boolean fields: http://camlex.codeplex.com/workitem/13991?ProjectName=camlex&lt;/li&gt;
&lt;li&gt;Add conditions to existing string query - &lt;a href="http://camlex.codeplex.com/discussions/353158"&gt;http://camlex.codeplex.com/discussions/353158&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>sadomovalex</author><pubDate>Mon, 23 Apr 2012 19:07:39 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Future improvements 20120423070739P</guid></item><item><title>Updated Wiki: Future improvements</title><link>http://camlex.codeplex.com/wikipage?title=Future improvements&amp;version=16</link><description>&lt;div class="wikidoc"&gt;The following are the features which are to be implemented in the next version of Camlex.NET project:&lt;br /&gt;&lt;del&gt;* Reverse engineering from pure CAML queries to C#-based Camlex queries&lt;/del&gt; -done
&lt;ul&gt;&lt;li&gt;Camlex.Net for Client OM - http://camlex.codeplex.com/workitem/13989&lt;/li&gt;
&lt;li&gt;Support for special forms for DATETIME values: &amp;lt;Value Type=&amp;quot;DateTime&amp;quot;&amp;gt;[Today + 7]&amp;lt;/Value&amp;gt; and &amp;lt;Value Type=&amp;quot;DateTime&amp;quot;&amp;gt;&amp;lt;Today /&amp;gt;&amp;lt;/Value&amp;gt; (http://camlex.codeplex.com/discussions/270483)&lt;/li&gt;&lt;/ul&gt;
&lt;del&gt;* Support for UserID in queries by user - see http://camlex.codeplex.com/discussions/264821&lt;/del&gt; - done
&lt;ul&gt;&lt;li&gt;Support for MEMBERSHIP nodes of CAML language&lt;/li&gt;
&lt;li&gt;Support for using Camlex.NET project in Silverlight applications&lt;/li&gt;
&lt;li&gt;Support for NULLABLE attribute of CAML language - &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsitedataquery.viewfields.aspx"&gt;http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsitedataquery.viewfields.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Support for Taxonomy fields (only for SharePoint 2010) - &lt;a href="http://msdn.microsoft.com/en-us/library/ff625182.aspx"&gt;http://msdn.microsoft.com/en-us/library/ff625182.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Support for float, double and decimal native data types&lt;/li&gt;
&lt;li&gt;Support more features available in CAML (e.g. &amp;lt;ProjectProperty&amp;gt; element inside &amp;lt;Value&amp;gt; tag)&lt;/li&gt;
&lt;li&gt;Compiled queries for better performance - see http://camlex.codeplex.com/discussions/330815&lt;/li&gt;
&lt;li&gt;No explicit comparisons for boolean fields: http://camlex.codeplex.com/workitem/13991?ProjectName=camlex&lt;/li&gt;
&lt;li&gt;Add expressions to existing string query - &lt;a href="http://camlex.codeplex.com/discussions/353158"&gt;http://camlex.codeplex.com/discussions/353158&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>sadomovalex</author><pubDate>Mon, 23 Apr 2012 19:07:02 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Future improvements 20120423070702P</guid></item><item><title>Updated Wiki: Future improvements</title><link>http://camlex.codeplex.com/wikipage?title=Future improvements&amp;version=15</link><description>&lt;div class="wikidoc"&gt;The following are the features which are to be implemented in the next version of Camlex.NET project:&lt;br /&gt;&lt;del&gt;* Reverse engineering from pure CAML queries to C#-based Camlex queries&lt;/del&gt; -done
&lt;ul&gt;&lt;li&gt;Camlex.Net for Client OM - http://camlex.codeplex.com/workitem/13989&lt;/li&gt;
&lt;li&gt;Support for special forms for DATETIME values: &amp;lt;Value Type=&amp;quot;DateTime&amp;quot;&amp;gt;[Today + 7]&amp;lt;/Value&amp;gt; and &amp;lt;Value Type=&amp;quot;DateTime&amp;quot;&amp;gt;&amp;lt;Today /&amp;gt;&amp;lt;/Value&amp;gt; (http://camlex.codeplex.com/discussions/270483)&lt;/li&gt;&lt;/ul&gt;
&lt;del&gt;* Support for UserID in queries by user - see http://camlex.codeplex.com/discussions/264821&lt;/del&gt; - done
&lt;ul&gt;&lt;li&gt;Support for MEMBERSHIP nodes of CAML language&lt;/li&gt;
&lt;li&gt;Support for using Camlex.NET project in Silverlight applications&lt;/li&gt;
&lt;li&gt;Support for NULLABLE attribute of CAML language - &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsitedataquery.viewfields.aspx"&gt;http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsitedataquery.viewfields.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Support for Taxonomy fields (only for SharePoint 2010) - &lt;a href="http://msdn.microsoft.com/en-us/library/ff625182.aspx"&gt;http://msdn.microsoft.com/en-us/library/ff625182.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Support for float, double and decimal native data types&lt;/li&gt;
&lt;li&gt;Support more features available in CAML (e.g. &amp;lt;ProjectProperty&amp;gt; element inside &amp;lt;Value&amp;gt; tag)&lt;/li&gt;
&lt;li&gt;Compiled queries for better performance - see http://camlex.codeplex.com/discussions/330815&lt;/li&gt;
&lt;li&gt;No explicit comparisons for boolean fields: http://camlex.codeplex.com/workitem/13991?ProjectName=camlex&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>sadomovalex</author><pubDate>Tue, 27 Mar 2012 08:06:11 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Future improvements 20120327080611A</guid></item><item><title>Updated Wiki: Future improvements</title><link>http://camlex.codeplex.com/wikipage?title=Future improvements&amp;version=14</link><description>&lt;div class="wikidoc"&gt;The following are the features which are to be implemented in the next version of Camlex.NET project:
&lt;ul&gt;&lt;li&gt;Reverse engineering from pure CAML queries to C#-based Camlex queries&lt;/li&gt;
&lt;li&gt;Camlex.Net for Client OM - http://camlex.codeplex.com/workitem/13989&lt;/li&gt;
&lt;li&gt;Support for special forms for DATETIME values: &amp;lt;Value Type=&amp;quot;DateTime&amp;quot;&amp;gt;[Today + 7]&amp;lt;/Value&amp;gt; and &amp;lt;Value Type=&amp;quot;DateTime&amp;quot;&amp;gt;&amp;lt;Today /&amp;gt;&amp;lt;/Value&amp;gt; (http://camlex.codeplex.com/discussions/270483)&lt;/li&gt;&lt;/ul&gt;
&lt;del&gt;* Support for UserID in queries by user - see http://camlex.codeplex.com/discussions/264821&lt;/del&gt; - done
&lt;ul&gt;&lt;li&gt;Support for MEMBERSHIP nodes of CAML language&lt;/li&gt;
&lt;li&gt;Support for using Camlex.NET project in Silverlight applications&lt;/li&gt;
&lt;li&gt;Support for NULLABLE attribute of CAML language - &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsitedataquery.viewfields.aspx" class="externalLink"&gt;http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsitedataquery.viewfields.aspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Support for Taxonomy fields (only for SharePoint 2010) - &lt;a href="http://msdn.microsoft.com/en-us/library/ff625182.aspx" class="externalLink"&gt;http://msdn.microsoft.com/en-us/library/ff625182.aspx&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Support for float, double and decimal native data types&lt;/li&gt;
&lt;li&gt;Support more features available in CAML (e.g. &amp;lt;ProjectProperty&amp;gt; element inside &amp;lt;Value&amp;gt; tag)&lt;/li&gt;
&lt;li&gt;Compiled queries for better performance - see http://camlex.codeplex.com/discussions/330815&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>sadomovalex</author><pubDate>Tue, 21 Feb 2012 07:27:47 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Future improvements 20120221072747A</guid></item><item><title>Updated Wiki: Home</title><link>http://camlex.codeplex.com/wikipage?version=28</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;Camlex.NET simplifies creating of CAML queries for Windows SharePoint Services by using expression trees.&lt;br /&gt;&lt;br /&gt;If you find Camlex.NET useful, you may support its development via &lt;a href="http&amp;#58;&amp;#47;&amp;#47;camlex-online.org"&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=camlex&amp;DownloadId=325346" alt="Donate" title="Donate" /&gt;&lt;/a&gt; button on the online version &lt;a href="http://camlex-online.org" class="externalLink"&gt;http://camlex-online.org&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;h1&gt;Online version&lt;/h1&gt;You can convert your existing CAML queries to C# code for Camlex.NET using online service powered by Camlex: &lt;a href="http://camlex-online.org" class="externalLink"&gt;http://camlex-online.org&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Installation Instructions&lt;/b&gt;&lt;br /&gt;In order to start working with Camlex.NET, please download and reference Camlex.NET.dll assembly in your project. After that you can create CAML queries using lambda expressions.&lt;br /&gt;Starting from version 3.0 you can install NuGet package for Camlex from online packages gallery:&lt;br /&gt;&lt;pre&gt;
Install-Package Camlex.NET.dll
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Quick Start&lt;/b&gt;&lt;br /&gt;Camlex.NET is a new technique in Sharepoint development. It abstracts developers from syntax of CAML queries and helps them to concentrate on business tasks. With Camlex.NET developers could think about WHAT they need to do, instead of HOW to do it. It also brings the following advantages for Sharepoint developers:
&lt;ul&gt;&lt;li&gt;Compile time checking of expressions&lt;/li&gt;
&lt;li&gt;Natural and intuitive syntax using lambda expressions and fluent interfaces&lt;/li&gt;
&lt;li&gt;Support for native .Net types (int, strings, bool, DateTime, Guid) and operations (==, !=, &amp;gt;, &amp;lt;, etc)&lt;/li&gt;
&lt;li&gt;Support for Sharepoint-specific data types&lt;/li&gt;
&lt;li&gt;Ability to specify non-constant expressions inside filtering conditions (variables, method calls, etc)&lt;/li&gt;
&lt;li&gt;Fully customizable resulting query object&lt;/li&gt;
&lt;li&gt;Ability to build dynamic filtering conditions and join them using And/Or logical joins&lt;/li&gt;
&lt;li&gt;Search by lookup fields using LookupValue or LookupId&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;Now let&amp;#39;s consider some basic scenarios:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Scenario 1. Simple query&lt;/b&gt;&lt;br /&gt;Suppose that you need to select all items which have Status field set to Completed (following is the standard syntax of CAML):&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Status&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Completed&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;This query can be made with Camlex using the following syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;string&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;] == &lt;span style="color:#A31515;"&gt;&amp;quot;Completed&amp;quot;&lt;/span&gt;).ToString();
&lt;/pre&gt;&lt;/div&gt;Notice, other comparison operations like “&amp;lt;”, “&amp;lt;=”, “&amp;gt;”, “&amp;gt;=” are supported as well.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Scenario 2. Query with “and”/”or” conditions&lt;/b&gt;&lt;br /&gt;Suppose that you need to select items which have ProductID = 1000 and IsCompleted set to false or null. Syntax of appropriate standard CAML query follows:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;ProductID&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Integer&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;1000&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;IsCompleted&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Boolean&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;IsCompleted&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;With help of Camlex it could be converted using following natural syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;ProductID&amp;quot;&lt;/span&gt;] == 1000 &amp;amp;&amp;amp; ((&lt;span style="color:Blue;"&gt;bool&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;IsCompleted&amp;quot;&lt;/span&gt;] == &lt;span style="color:Blue;"&gt;false&lt;/span&gt; || x[&lt;span style="color:#A31515;"&gt;&amp;quot;IsCompleted&amp;quot;&lt;/span&gt;] == &lt;span style="color:Blue;"&gt;null&lt;/span&gt;))
            .ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 3. Query with DateTime&lt;/b&gt;&lt;br /&gt;Lets suppose that you need to retrieve items which were modified on 01-Jan-2010:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Modified&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;DateTime&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;2010-01-01T12:00:00Z&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Using Camlex you can simply write:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (DateTime)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Modified&amp;quot;&lt;/span&gt;] == &lt;span style="color:Blue;"&gt;new&lt;/span&gt; DateTime(2010, 01, 01)).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 4. Query with BeginsWith and Contains operations&lt;/b&gt;&lt;br /&gt;Consider the query that should return items which Title field starts with “Task” and Project field contains “Camlex”:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;BeginsWith&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Task&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;BeginsWith&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Project&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Camlex&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;You can achieve result using the following natural syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; ((&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;]).StartsWith(&lt;span style="color:#A31515;"&gt;&amp;quot;Task&amp;quot;&lt;/span&gt;) &amp;amp;&amp;amp; ((&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Project&amp;quot;&lt;/span&gt;]).Contains(&lt;span style="color:#A31515;"&gt;&amp;quot;Camlex&amp;quot;&lt;/span&gt;))
            .ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 5. Query with none C# native data types&lt;/b&gt;&lt;br /&gt;Suppose that you need to retrieve all items modified by Administrator:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Editor&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;User&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Administrator&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Notice that value is of Sharepoint-specific User data type. You can easily achieve the result with alternative string-based syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Editor&amp;quot;&lt;/span&gt;] == (DataTypes.User)&lt;span style="color:#A31515;"&gt;&amp;quot;Administrator&amp;quot;&lt;/span&gt;)
                .ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 6. Query with sorting (OrderBy)&lt;/b&gt;&lt;br /&gt;Suppose that you need to select all items which have ID &amp;gt;= 5 and the result should be sorted by Modified field:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Geq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;ID&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Integer&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;5&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Geq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;OrderBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Modified&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;OrderBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;You need to write the following Camlex expression in order to construct this query:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;] &amp;gt;= 5)
        .OrderBy(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Modified&amp;quot;&lt;/span&gt;]).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 7. Query with grouping (GroupBy)&lt;/b&gt;&lt;br /&gt;Suppose that we need to select items having not-null Status field and result set should be grouped by Author field:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNotNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Status&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNotNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;GroupBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Author&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;GroupBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;With Camlex you could simply rewrite it as:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;] != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
        .GroupBy(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Author&amp;quot;&lt;/span&gt;]).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 8. Query with non-constant expressions in lvalue and rvalue&lt;/b&gt;&lt;br /&gt;Non-constant expression gives you more control over CAML. Suppose that you need to select items depending on current locale: for English locale you need to select items which have TitleEng field set to “eng”; for non-English locale you need to select items which have Title field set to “non-eng”. I.e.:&lt;br /&gt;Query for English locale:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;TitleEng&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;eng&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Query for non-English locale:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;non-eng&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;It is not so hard with Camlex:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; isEng = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;; &lt;span style="color:Green;"&gt;// or false depending on Thread.CurrentThread.CurrentUICulture&lt;/span&gt;

&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[isEng ? &lt;span style="color:#A31515;"&gt;&amp;quot;TitleEng&amp;quot;&lt;/span&gt; : &lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;] == (isEng ? &lt;span style="color:#A31515;"&gt;&amp;quot;eng&amp;quot;&lt;/span&gt; : &lt;span style="color:#A31515;"&gt;&amp;quot;non-eng&amp;quot;&lt;/span&gt;)).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 9. Dynamic filtering conditions&lt;/b&gt;&lt;br /&gt;Starting with 2.0 version you can build dynamic filtering conditions and join them using WhereAll/WhereAny methods which use And/Or logical joins respectively.&lt;br /&gt;Suppose that we need to retrieve all items which contain at least one of the values {“hello”, “greeting”, “hi”} in Title field. I.e. we need to use the following CAML query:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;hello&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;greeting&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;hi&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;With Camlex.NET 2.0 we can create lambda expression for each condition and pass them into new WhereAny method:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// list of tokens&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; tokens = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:Blue;"&gt;string&lt;/span&gt;&amp;gt; { &lt;span style="color:#A31515;"&gt;&amp;quot;hello&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;greeting&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;hi&amp;quot;&lt;/span&gt; };
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; expressions = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt;();

&lt;span style="color:Green;"&gt;// create lambda expression for each token in list&lt;/span&gt;
&lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt; t &lt;span style="color:Blue;"&gt;in&lt;/span&gt; tokens)
{
    &lt;span style="color:Blue;"&gt;string&lt;/span&gt; token = t;
   expressions.Add(x =&amp;gt; ((&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;]).Contains(token));
}

&lt;span style="color:Green;"&gt;// prepare query&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml = Camlex.Query().WhereAny(expressions).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>sadomovalex</author><pubDate>Sat, 07 Jan 2012 21:44:02 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20120107094402P</guid></item><item><title>Updated Wiki: Home</title><link>http://camlex.codeplex.com/wikipage?version=27</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;Camlex.NET simplifies creating of CAML queries for Windows SharePoint Services by using expression trees.&lt;br /&gt;&lt;br /&gt;If you find Camlex.NET useful, you may support its development by clicking &lt;a href="http&amp;#58;&amp;#47;&amp;#47;camlex-online.org"&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=camlex&amp;DownloadId=325346" alt="Donate" title="Donate" /&gt;&lt;/a&gt; button on online version &lt;a href="http://camlex-online.org" class="externalLink"&gt;http://camlex-online.org&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;h1&gt;Online version&lt;/h1&gt;You can convert your existing CAML queries to C# code for Camlex.NET using online service powered by Camlex: &lt;a href="http://camlex-online.org" class="externalLink"&gt;http://camlex-online.org&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Installation Instructions&lt;/b&gt;&lt;br /&gt;In order to start working with Camlex.NET, please download and reference Camlex.NET.dll assembly in your project. After that you can create CAML queries using lambda expressions.&lt;br /&gt;Starting from version 3.0 you can install NuGet package for Camlex from online packages gallery:&lt;br /&gt;&lt;pre&gt;
Install-Package Camlex.NET.dll
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Quick Start&lt;/b&gt;&lt;br /&gt;Camlex.NET is a new technique in Sharepoint development. It abstracts developers from syntax of CAML queries and helps them to concentrate on business tasks. With Camlex.NET developers could think about WHAT they need to do, instead of HOW to do it. It also brings the following advantages for Sharepoint developers:
&lt;ul&gt;&lt;li&gt;Compile time checking of expressions&lt;/li&gt;
&lt;li&gt;Natural and intuitive syntax using lambda expressions and fluent interfaces&lt;/li&gt;
&lt;li&gt;Support for native .Net types (int, strings, bool, DateTime, Guid) and operations (==, !=, &amp;gt;, &amp;lt;, etc)&lt;/li&gt;
&lt;li&gt;Support for Sharepoint-specific data types&lt;/li&gt;
&lt;li&gt;Ability to specify non-constant expressions inside filtering conditions (variables, method calls, etc)&lt;/li&gt;
&lt;li&gt;Fully customizable resulting query object&lt;/li&gt;
&lt;li&gt;Ability to build dynamic filtering conditions and join them using And/Or logical joins&lt;/li&gt;
&lt;li&gt;Search by lookup fields using LookupValue or LookupId&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;Now let&amp;#39;s consider some basic scenarios:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Scenario 1. Simple query&lt;/b&gt;&lt;br /&gt;Suppose that you need to select all items which have Status field set to Completed (following is the standard syntax of CAML):&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Status&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Completed&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;This query can be made with Camlex using the following syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;string&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;] == &lt;span style="color:#A31515;"&gt;&amp;quot;Completed&amp;quot;&lt;/span&gt;).ToString();
&lt;/pre&gt;&lt;/div&gt;Notice, other comparison operations like “&amp;lt;”, “&amp;lt;=”, “&amp;gt;”, “&amp;gt;=” are supported as well.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Scenario 2. Query with “and”/”or” conditions&lt;/b&gt;&lt;br /&gt;Suppose that you need to select items which have ProductID = 1000 and IsCompleted set to false or null. Syntax of appropriate standard CAML query follows:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;ProductID&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Integer&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;1000&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;IsCompleted&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Boolean&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;IsCompleted&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;With help of Camlex it could be converted using following natural syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;ProductID&amp;quot;&lt;/span&gt;] == 1000 &amp;amp;&amp;amp; ((&lt;span style="color:Blue;"&gt;bool&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;IsCompleted&amp;quot;&lt;/span&gt;] == &lt;span style="color:Blue;"&gt;false&lt;/span&gt; || x[&lt;span style="color:#A31515;"&gt;&amp;quot;IsCompleted&amp;quot;&lt;/span&gt;] == &lt;span style="color:Blue;"&gt;null&lt;/span&gt;))
            .ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 3. Query with DateTime&lt;/b&gt;&lt;br /&gt;Lets suppose that you need to retrieve items which were modified on 01-Jan-2010:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Modified&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;DateTime&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;2010-01-01T12:00:00Z&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Using Camlex you can simply write:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (DateTime)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Modified&amp;quot;&lt;/span&gt;] == &lt;span style="color:Blue;"&gt;new&lt;/span&gt; DateTime(2010, 01, 01)).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 4. Query with BeginsWith and Contains operations&lt;/b&gt;&lt;br /&gt;Consider the query that should return items which Title field starts with “Task” and Project field contains “Camlex”:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;BeginsWith&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Task&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;BeginsWith&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Project&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Camlex&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;You can achieve result using the following natural syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; ((&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;]).StartsWith(&lt;span style="color:#A31515;"&gt;&amp;quot;Task&amp;quot;&lt;/span&gt;) &amp;amp;&amp;amp; ((&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Project&amp;quot;&lt;/span&gt;]).Contains(&lt;span style="color:#A31515;"&gt;&amp;quot;Camlex&amp;quot;&lt;/span&gt;))
            .ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 5. Query with none C# native data types&lt;/b&gt;&lt;br /&gt;Suppose that you need to retrieve all items modified by Administrator:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Editor&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;User&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Administrator&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Notice that value is of Sharepoint-specific User data type. You can easily achieve the result with alternative string-based syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Editor&amp;quot;&lt;/span&gt;] == (DataTypes.User)&lt;span style="color:#A31515;"&gt;&amp;quot;Administrator&amp;quot;&lt;/span&gt;)
                .ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 6. Query with sorting (OrderBy)&lt;/b&gt;&lt;br /&gt;Suppose that you need to select all items which have ID &amp;gt;= 5 and the result should be sorted by Modified field:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Geq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;ID&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Integer&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;5&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Geq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;OrderBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Modified&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;OrderBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;You need to write the following Camlex expression in order to construct this query:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;] &amp;gt;= 5)
        .OrderBy(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Modified&amp;quot;&lt;/span&gt;]).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 7. Query with grouping (GroupBy)&lt;/b&gt;&lt;br /&gt;Suppose that we need to select items having not-null Status field and result set should be grouped by Author field:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNotNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Status&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNotNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;GroupBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Author&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;GroupBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;With Camlex you could simply rewrite it as:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;] != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
        .GroupBy(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Author&amp;quot;&lt;/span&gt;]).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 8. Query with non-constant expressions in lvalue and rvalue&lt;/b&gt;&lt;br /&gt;Non-constant expression gives you more control over CAML. Suppose that you need to select items depending on current locale: for English locale you need to select items which have TitleEng field set to “eng”; for non-English locale you need to select items which have Title field set to “non-eng”. I.e.:&lt;br /&gt;Query for English locale:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;TitleEng&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;eng&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Query for non-English locale:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;non-eng&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;It is not so hard with Camlex:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; isEng = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;; &lt;span style="color:Green;"&gt;// or false depending on Thread.CurrentThread.CurrentUICulture&lt;/span&gt;

&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[isEng ? &lt;span style="color:#A31515;"&gt;&amp;quot;TitleEng&amp;quot;&lt;/span&gt; : &lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;] == (isEng ? &lt;span style="color:#A31515;"&gt;&amp;quot;eng&amp;quot;&lt;/span&gt; : &lt;span style="color:#A31515;"&gt;&amp;quot;non-eng&amp;quot;&lt;/span&gt;)).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 9. Dynamic filtering conditions&lt;/b&gt;&lt;br /&gt;Starting with 2.0 version you can build dynamic filtering conditions and join them using WhereAll/WhereAny methods which use And/Or logical joins respectively.&lt;br /&gt;Suppose that we need to retrieve all items which contain at least one of the values {“hello”, “greeting”, “hi”} in Title field. I.e. we need to use the following CAML query:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;hello&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;greeting&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;hi&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;With Camlex.NET 2.0 we can create lambda expression for each condition and pass them into new WhereAny method:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// list of tokens&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; tokens = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:Blue;"&gt;string&lt;/span&gt;&amp;gt; { &lt;span style="color:#A31515;"&gt;&amp;quot;hello&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;greeting&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;hi&amp;quot;&lt;/span&gt; };
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; expressions = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt;();

&lt;span style="color:Green;"&gt;// create lambda expression for each token in list&lt;/span&gt;
&lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt; t &lt;span style="color:Blue;"&gt;in&lt;/span&gt; tokens)
{
    &lt;span style="color:Blue;"&gt;string&lt;/span&gt; token = t;
   expressions.Add(x =&amp;gt; ((&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;]).Contains(token));
}

&lt;span style="color:Green;"&gt;// prepare query&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml = Camlex.Query().WhereAny(expressions).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>sadomovalex</author><pubDate>Sat, 07 Jan 2012 21:43:01 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20120107094301P</guid></item><item><title>Updated Wiki: Home</title><link>http://camlex.codeplex.com/wikipage?version=26</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;Camlex.NET simplifies creating of CAML queries for Windows SharePoint Services by using expression trees.&lt;br /&gt;&lt;br /&gt;If you find Camlex.Net useful, you may support its development by clicking &lt;img src="http://i3.codeplex.com/Download?ProjectName=camlex&amp;DownloadId=325346" alt="btn_donate_SM.gif" title="btn_donate_SM.gif" /&gt; button on online version &lt;a href="http://camlex-online.org" class="externalLink"&gt;http://camlex-online.org&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;h1&gt;Online version&lt;/h1&gt;You can convert your existing CAML queries to C# code for Camlex.NET using online service powered by Camlex: &lt;a href="http://camlex-online.org" class="externalLink"&gt;http://camlex-online.org&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Installation Instructions&lt;/b&gt;&lt;br /&gt;In order to start working with Camlex.NET, please download and reference Camlex.NET.dll assembly in your project. After that you can create CAML queries using lambda expressions.&lt;br /&gt;Starting from version 3.0 you can install NuGet package for Camlex from online packages gallery:&lt;br /&gt;&lt;pre&gt;
Install-Package Camlex.NET.dll
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Quick Start&lt;/b&gt;&lt;br /&gt;Camlex.NET is a new technique in Sharepoint development. It abstracts developers from syntax of CAML queries and helps them to concentrate on business tasks. With Camlex.NET developers could think about WHAT they need to do, instead of HOW to do it. It also brings the following advantages for Sharepoint developers:
&lt;ul&gt;&lt;li&gt;Compile time checking of expressions&lt;/li&gt;
&lt;li&gt;Natural and intuitive syntax using lambda expressions and fluent interfaces&lt;/li&gt;
&lt;li&gt;Support for native .Net types (int, strings, bool, DateTime, Guid) and operations (==, !=, &amp;gt;, &amp;lt;, etc)&lt;/li&gt;
&lt;li&gt;Support for Sharepoint-specific data types&lt;/li&gt;
&lt;li&gt;Ability to specify non-constant expressions inside filtering conditions (variables, method calls, etc)&lt;/li&gt;
&lt;li&gt;Fully customizable resulting query object&lt;/li&gt;
&lt;li&gt;Ability to build dynamic filtering conditions and join them using And/Or logical joins&lt;/li&gt;
&lt;li&gt;Search by lookup fields using LookupValue or LookupId&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;Now let&amp;#39;s consider some basic scenarios:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Scenario 1. Simple query&lt;/b&gt;&lt;br /&gt;Suppose that you need to select all items which have Status field set to Completed (following is the standard syntax of CAML):&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Status&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Completed&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;This query can be made with Camlex using the following syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;string&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;] == &lt;span style="color:#A31515;"&gt;&amp;quot;Completed&amp;quot;&lt;/span&gt;).ToString();
&lt;/pre&gt;&lt;/div&gt;Notice, other comparison operations like “&amp;lt;”, “&amp;lt;=”, “&amp;gt;”, “&amp;gt;=” are supported as well.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Scenario 2. Query with “and”/”or” conditions&lt;/b&gt;&lt;br /&gt;Suppose that you need to select items which have ProductID = 1000 and IsCompleted set to false or null. Syntax of appropriate standard CAML query follows:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;ProductID&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Integer&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;1000&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;IsCompleted&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Boolean&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;IsCompleted&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;With help of Camlex it could be converted using following natural syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;ProductID&amp;quot;&lt;/span&gt;] == 1000 &amp;amp;&amp;amp; ((&lt;span style="color:Blue;"&gt;bool&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;IsCompleted&amp;quot;&lt;/span&gt;] == &lt;span style="color:Blue;"&gt;false&lt;/span&gt; || x[&lt;span style="color:#A31515;"&gt;&amp;quot;IsCompleted&amp;quot;&lt;/span&gt;] == &lt;span style="color:Blue;"&gt;null&lt;/span&gt;))
            .ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 3. Query with DateTime&lt;/b&gt;&lt;br /&gt;Lets suppose that you need to retrieve items which were modified on 01-Jan-2010:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Modified&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;DateTime&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;2010-01-01T12:00:00Z&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Using Camlex you can simply write:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (DateTime)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Modified&amp;quot;&lt;/span&gt;] == &lt;span style="color:Blue;"&gt;new&lt;/span&gt; DateTime(2010, 01, 01)).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 4. Query with BeginsWith and Contains operations&lt;/b&gt;&lt;br /&gt;Consider the query that should return items which Title field starts with “Task” and Project field contains “Camlex”:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;BeginsWith&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Task&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;BeginsWith&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Project&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Camlex&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;And&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;You can achieve result using the following natural syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; ((&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;]).StartsWith(&lt;span style="color:#A31515;"&gt;&amp;quot;Task&amp;quot;&lt;/span&gt;) &amp;amp;&amp;amp; ((&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Project&amp;quot;&lt;/span&gt;]).Contains(&lt;span style="color:#A31515;"&gt;&amp;quot;Camlex&amp;quot;&lt;/span&gt;))
            .ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 5. Query with none C# native data types&lt;/b&gt;&lt;br /&gt;Suppose that you need to retrieve all items modified by Administrator:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Editor&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;User&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Administrator&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Notice that value is of Sharepoint-specific User data type. You can easily achieve the result with alternative string-based syntax:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Editor&amp;quot;&lt;/span&gt;] == (DataTypes.User)&lt;span style="color:#A31515;"&gt;&amp;quot;Administrator&amp;quot;&lt;/span&gt;)
                .ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 6. Query with sorting (OrderBy)&lt;/b&gt;&lt;br /&gt;Suppose that you need to select all items which have ID &amp;gt;= 5 and the result should be sorted by Modified field:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Geq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;ID&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Integer&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;5&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Geq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;OrderBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Modified&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;OrderBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;You need to write the following Camlex expression in order to construct this query:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;] &amp;gt;= 5)
        .OrderBy(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Modified&amp;quot;&lt;/span&gt;]).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 7. Query with grouping (GroupBy)&lt;/b&gt;&lt;br /&gt;Suppose that we need to select items having not-null Status field and result set should be grouped by Author field:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNotNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Status&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;IsNotNull&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;GroupBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Author&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;GroupBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;With Camlex you could simply rewrite it as:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;] != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
        .GroupBy(x =&amp;gt; x[&lt;span style="color:#A31515;"&gt;&amp;quot;Author&amp;quot;&lt;/span&gt;]).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 8. Query with non-constant expressions in lvalue and rvalue&lt;/b&gt;&lt;br /&gt;Non-constant expression gives you more control over CAML. Suppose that you need to select items depending on current locale: for English locale you need to select items which have TitleEng field set to “eng”; for non-English locale you need to select items which have Title field set to “non-eng”. I.e.:&lt;br /&gt;Query for English locale:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;TitleEng&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;eng&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Query for non-English locale:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;non-eng&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Eq&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;It is not so hard with Camlex:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; isEng = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;; &lt;span style="color:Green;"&gt;// or false depending on Thread.CurrentThread.CurrentUICulture&lt;/span&gt;

&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml =
    Camlex.Query()
        .Where(x =&amp;gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[isEng ? &lt;span style="color:#A31515;"&gt;&amp;quot;TitleEng&amp;quot;&lt;/span&gt; : &lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;] == (isEng ? &lt;span style="color:#A31515;"&gt;&amp;quot;eng&amp;quot;&lt;/span&gt; : &lt;span style="color:#A31515;"&gt;&amp;quot;non-eng&amp;quot;&lt;/span&gt;)).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Scenario 9. Dynamic filtering conditions&lt;/b&gt;&lt;br /&gt;Starting with 2.0 version you can build dynamic filtering conditions and join them using WhereAll/WhereAny methods which use And/Or logical joins respectively.&lt;br /&gt;Suppose that we need to retrieve all items which contain at least one of the values {“hello”, “greeting”, “hi”} in Title field. I.e. we need to use the following CAML query:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;hello&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;greeting&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FieldRef&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Title&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;Text&lt;/span&gt;&lt;span style="color:Black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;hi&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Value&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Contains&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Or&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Where&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;With Camlex.NET 2.0 we can create lambda expression for each condition and pass them into new WhereAny method:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// list of tokens&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; tokens = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:Blue;"&gt;string&lt;/span&gt;&amp;gt; { &lt;span style="color:#A31515;"&gt;&amp;quot;hello&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;greeting&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;hi&amp;quot;&lt;/span&gt; };
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; expressions = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;Expression&amp;lt;Func&amp;lt;SPListItem, &lt;span style="color:Blue;"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt;();

&lt;span style="color:Green;"&gt;// create lambda expression for each token in list&lt;/span&gt;
&lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color:Blue;"&gt;string&lt;/span&gt; t &lt;span style="color:Blue;"&gt;in&lt;/span&gt; tokens)
{
    &lt;span style="color:Blue;"&gt;string&lt;/span&gt; token = t;
   expressions.Add(x =&amp;gt; ((&lt;span style="color:Blue;"&gt;string&lt;/span&gt;)x[&lt;span style="color:#A31515;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;]).Contains(token));
}

&lt;span style="color:Green;"&gt;// prepare query&lt;/span&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; caml = Camlex.Query().WhereAny(expressions).ToString();
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>sadomovalex</author><pubDate>Sat, 07 Jan 2012 21:39:03 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20120107093903P</guid></item></channel></rss>