 <p>Technically you <em>can</em> <a href="http://blogs.msdn.com/madst/archive/2007/05/11/recursive-lambda-expressions.aspx" rel="nofollow noreferrer">write recursive lambda expressions</a>, but you need to be insane or insanely bright to try (I haven't figured out which). But you can cheat:</p> <pre><code> Func&lt;Node, decimal&gt; nodeSum = null; nodeSum = node =&gt; { decimal result = node.Amount; if (node.Children != null) { result = result + node.Children.Sum(nodeSum); } return result; }; var value = nodeSum(amounts); </code></pre>