I started getting really tired of looking up the translation between the ExpressionType and concrete Expression type (they don’t match up), so I created this cheat sheet that has each ExpressionType, derived Expression type and a simple example. What’s interesting is a few are only available in VB.NET, but no one really wants non-short-circuited Or/And operators, do they? You can [download the PDF version](http://grabbagoftimg.s3.amazonaws.com/Expression Cheat Sheet.pdf), or just view the big list in all its glory:
ExpressionType
<td width="142">
Type
</td>
<td width="474">
Example
</td>
Add
<td>
BinaryExpression
</td>
<td>
<pre><span style="color: blue">int </span>i = 2, j = 3;
Expression <Func <int >> example = () => i + j;
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
AddChecked
</td>
<td>
BinaryExpression
</td>
<td>
<pre><span style="color: blue">int </span>i = <span style="color: #2b91af">Int32</span>.MaxValue, j = 1;
Expression <Func <int >> example = () => checked (i + j);
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
And
</td>
<td>
BinaryExpression
</td>
<td>
<pre><span style="color: blue">Dim </span>i <span style="color: blue">As Boolean </span>= <span style="color: blue">True</span>, j <span style="color: blue">As Boolean </span>= <span style="color: blue">False
Dim sample As Expression(Of Func(Of Boolean )) = _
Function () i And j
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
AndAlso
</td>
<td>
BinaryExpression
</td>
<td>
<pre><span style="color: blue">bool </span>i = <span style="color: blue">true</span>, j = <span style="color: blue">false</span>;
Expression <Func <bool >> example = () => i && j;
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
ArrayLength
</td>
<td>
UnaryExpression
</td>
<td>
<pre><span style="color: blue">int</span>[] values = {1, 2, 3};
Expression <Func <int >> example = () => values.Length;
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
ArrayIndex
</td>
<td>
MethodCallExpression
</td>
<td>
<pre><span style="color: blue">int</span>[] values = {1, 2, 3};
Expression <Func <int >> example = () => values[1];
<p>
<a href="http://11011.net/software/vspaste"></a><a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
Call
</td>
<td>
MethodCallExpression
</td>
<td>
<pre><span style="color: blue">var </span>sample = <span style="color: blue">new </span><span style="color: #2b91af">Sample</span>();
Expression <Func <int >> example =
() => sample.Calc();
<tr>
<td>
Coalesce
</td>
<td>
BinaryExpression
</td>
<td>
<pre><span style="color: blue">int</span>? i = <span style="color: blue">null</span>, j = 5;
Expression <Func <int ?>> example = () => i ?? j;
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
Conditional
</td>
<td>
ConditionalExpression
</td>
<td>
<pre><span style="color: blue">int </span>i = 3, j = 5;
bool k = false ;
Expression <Func <int ?>> example = () => k ? i : j;
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
Constant
</td>
<td>
ConstantExpression
</td>
<td>
<pre><span style="color: #2b91af">Expression</span><<span style="color: #2b91af">Func</span><<span style="color: blue">int</span>>> example = () => 5;</pre>
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
Convert
</td>
<td>
UnaryExpression
</td>
<td>
<pre><span style="color: blue">int </span>i = 5;
object j = i;
Expression <Func <int >> example = () => (int ) j;
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
ConvertChecked
</td>
<td>
UnaryExpression
</td>
<td>
<pre><span style="color: blue">long </span>i = 5;
Expression <Func <int >> example = () => checked ((int )i);
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
Divide
</td>
<td>
BinaryExpression
</td>
<td>
<pre><span style="color: blue">int </span>i = 21, j = 3;
Expression <Func <int >> example = () => i / j;
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
Equal
</td>
<td>
BinaryExpression
</td>
<td>
<pre><span style="color: blue">int </span>i = 21, j = 3;
Expression <Func <bool >> example = () => i == j;
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
ExclusiveOr
</td>
<td>
BinaryExpression
</td>
<td>
<pre><span style="color: blue">int </span>i = 12, j = 7;
Expression <Func <int >> example = () => i ^ j;
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
GreaterThan
</td>
<td>
BinaryExpression
</td>
<td>
<pre><span style="color: blue">int </span>i = 12, j = 7;
Expression <Func <bool >> example = () => i > j;
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
GreaterThanOrEqual
</td>
<td>
BinaryExpression
</td>
<td>
<pre><span style="color: blue">int </span>i = 12, j = 7;
Expression <Func <bool >> example = () => i >= j;
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
Invoke
</td>
<td>
InvocationExpression
</td>
<td>
<pre><span style="color: #2b91af">Expression</span><<span style="color: #2b91af">Func</span><<span style="color: blue">int</span>, <span style="color: blue">int</span>, <span style="color: blue">int</span>>> expr = (i, j) => i + j;
Expression invoke = Expression .Invoke(
expr,
Expression .Constant(5),
Expression .Constant(4));
Expression <Func <int >> example =
Expression .Lambda<Func <int >>(invoke);
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
Lambda
</td>
<td>
LambdaExpression
</td>
<td>
<pre><span style="color: #2b91af">Expression</span><<span style="color: #2b91af">Func</span><<span style="color: blue">int</span>>> example =
<span style="color: #2b91af">Expression</span>.Lambda<<span style="color: #2b91af">Func</span><<span style="color: blue">int</span>>>(<span style="color: #2b91af">Expression</span>.Constant(5));</pre>
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
LeftShift
</td>
<td>
BinaryExpression
</td>
<td>
<pre><span style="color: blue">int </span>i = 8;
Expression <Func <int >> example = () => i << 1;
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
LessThan
</td>
<td>
BinaryExpression
</td>
<td>
<pre><span style="color: blue">int </span>i = 12, j = 7;
Expression <Func <bool >> example = () => i < j;
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
LessThanOrEqual
</td>
<td>
BinaryExpression
</td>
<td>
<pre><span style="color: blue">int </span>i = 12, j = 7;
Expression <Func <bool >> example = () => i <= j;
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
ListInit
</td>
<td>
ListInitExpression
</td>
<td>
<pre><span style="color: #2b91af">Expression</span><<span style="color: #2b91af">Func</span><<span style="color: #2b91af">List</span><<span style="color: blue">int</span>>>> example =
() => <span style="color: blue">new </span><span style="color: #2b91af">List</span><<span style="color: blue">int</span>> {1, 2, 3};</pre>
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
MemberAccess
</td>
<td>
MemberExpression
</td>
<td>
<pre><span style="color: blue">var </span>c = <span style="color: blue">new </span><span style="color: #2b91af">Customer </span>{Name = <span style="color: #a31515">"Bob"</span>};
Expression <Func <string >> example = () => c.Name;
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
MemberInit
</td>
<td>
MemberInitExpression
</td>
<td>
<pre><span style="color: #2b91af">Expression</span><<span style="color: #2b91af">Func</span><<span style="color: #2b91af">Customer</span>>> example =
() => <span style="color: blue">new </span><span style="color: #2b91af">Customer </span>{Name = <span style="color: #a31515">"Bob"</span>};</pre>
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
Modulo
</td>
<td>
BinaryExpression
</td>
<td>
<pre><span style="color: blue">int </span>i = 5, j = 3;
Expression <Func <int >> example = () => i % j;
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
Multiply
</td>
<td>
BinaryExpression
</td>
<td>
<pre><span style="color: blue">int </span>i = 5, j = 3;
Expression <Func <int >> example = () => i * j;
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
MultiplyChecked
</td>
<td>
BinaryExpression
</td>
<td>
<pre><span style="color: blue">int </span>i = 5, j = 3;
Expression <Func <int >> example = () => checked (i * j);
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
Negate
</td>
<td>
UnaryExpression
</td>
<td>
<pre><span style="color: blue">int </span>i = 5;
Expression <Func <int >> example = () => -i;
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
UnaryPlus
</td>
<td>
UnaryExpression
</td>
<td>
<pre><span style="color: blue">var </span>m = <span style="color: blue">new </span><span style="color: #2b91af">Money </span>{ Amount = -10m };
Expression <Func <Money >> example = () => +m;
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
NegateChecked
</td>
<td>
UnaryExpression
</td>
<td>
<pre><span style="color: blue">int </span>i = 5;
Expression <Func <int >> example = () => checked (-i);
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
New
</td>
<td>
NewExpression
</td>
<td>
<pre><span style="color: #2b91af">Expression</span><<span style="color: #2b91af">Func</span><<span style="color: #2b91af">Customer</span>>> example =
() => <span style="color: blue">new </span><span style="color: #2b91af">Customer</span>();</pre>
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
NewArrayInit
</td>
<td>
NewArrayExpression
</td>
<td>
<pre><span style="color: #2b91af">Expression</span><<span style="color: #2b91af">Func</span><<span style="color: blue">int</span>[]>> example =
() => <span style="color: blue">new</span>[] {1, 2, 3};</pre>
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
NewArrayBounds
</td>
<td>
NewArrayExpression
</td>
<td>
<pre><span style="color: #2b91af">Expression</span><<span style="color: #2b91af">Func</span><<span style="color: blue">int</span>[]>> example = () => <span style="color: blue">new int</span>[10];</pre>
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
Not
</td>
<td>
UnaryExpression
</td>
<td>
<pre><span style="color: blue">bool </span>val = <span style="color: blue">true</span>;
Expression <Func <bool >> example = () => !val;
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
NotEqual
</td>
<td>
BinaryExpression
</td>
<td>
<pre><span style="color: blue">int </span>i = 4, j = 7;
Expression <Func <bool >> example = () => i != j;
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
Or
</td>
<td>
BinaryExpression
</td>
<td>
<pre><span style="color: blue">Dim </span>i <span style="color: blue">As Boolean </span>= <span style="color: blue">True</span>, j <span style="color: blue">As Boolean </span>= <span style="color: blue">False
Dim sample As Expression(Of Func(Of Boolean )) = _
Function () i Or j
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
OrElse
</td>
<td>
BinaryExpression
</td>
<td>
<pre><span style="color: blue">bool </span>i = <span style="color: blue">true</span>, j = <span style="color: blue">false</span>;
Expression <Func <bool >> example = () => i || j;
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
Parameter
</td>
<td>
ParameterExpression
</td>
<td>
<pre><span style="color: green">// (i, j) => i + j;
ParameterExpression param1 =
Expression .Parameter(typeof (int ), “i” );
ParameterExpression param2 =
Expression .Parameter(typeof (int ), “j” );
var addExpression = Expression .Add(param1, param2);
var example = Expression .Lambda<Func <int , int , int >>(
addExpression, param1, param2);
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
Power
</td>
<td>
BinaryExpression
</td>
<td>
<pre><span style="color: blue">Dim </span>i <span style="color: blue">As Integer </span>= 3, j <span style="color: blue">As Integer </span>= 2
Dim sample As Expression(Of Func(Of Integer )) = _
Function () i ^ j
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
Quote
</td>
<td>
UnaryExpression
</td>
<td>
<pre><span style="color: blue">int </span>i = 3, j = 2;
Expression <Func <int >> inner = () => i * j;
var quoted = Expression .Quote(inner);
Expression <Func <Expression <Func <int >>>> example =
Expression .Lambda<Func <Expression <Func <int >>>>(quoted);
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
RightShift
</td>
<td>
BinaryExpression
</td>
<td>
<pre><span style="color: blue">int </span>i = 8;
Expression <Func <int >> example = () => i >> 1;
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
Subtract
</td>
<td>
BinaryExpression
</td>
<td>
<pre><span style="color: blue">int </span>i = 8, j = 5;
Expression <Func <int >> example = () => i - j;
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
SubtractChecked
</td>
<td>
BinaryExpression
</td>
<td>
<pre><span style="color: blue">int </span>i = 8, j = 5;
Expression <Func <int >> example = () => checked (i - j);
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
TypeAs
</td>
<td>
UnaryExpression
</td>
<td>
<pre><span style="color: blue">var </span>c = <span style="color: blue">new </span><span style="color: #2b91af">Customer </span>{Name = <span style="color: #a31515">"Bob"</span>};
Expression <Func <Person >> example = () => c as Person ;
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr>
<tr>
<td>
TypeIs
</td>
<td>
TypeBinaryExpression
</td>
<td>
<pre><span style="color: blue">var </span>c = <span style="color: blue">new </span><span style="color: #2b91af">Customer </span>{Name = <span style="color: #a31515">"Bob"</span>};
Expression <Func <bool >> example = () => c is int ;
<p>
<a href="http://11011.net/software/vspaste"></a></td> </tr> </tbody> </table>
<p>
This is only for C# 3.0, the .NET 4.0 list should grow quite a bit.
</p>
Please enable JavaScript to view the comments powered by Disqus.
Cookies & analytics
This site uses Google Analytics to understand which posts get read. No analytics cookies are set unless you accept. Nothing here is required for the site to work.
Decline non-essential
Accept all