Programming Microsoft Linq(ISBN 13:978-0-7356-2400-9 或 ISBN 10:0-7356-2400-3)的第 11 章(内部表达式树)和第 12 章(扩展 Linq)对我来说非常宝贵。我没有读过 Jons 的书,但他是一个有素质的人,而且解释得很好,所以我认为他的报道也会很好。
另一个很棒的资源是Bart De Smet 的博客
另外,请密切关注 MSDN,构建Simple Linq to Database的示例代码(由 Pedram Rezaei 撰写)即将获得大约 40 页的 Doco 解释它。
Expression Tree 的一个非常非常有用的资源实际上我认为它是必备的,那就是Expression Tree Visualiser调试工具。
您还应该尽可能多地了解表达式树访问者,这里有一个非常好的基类实现。
这是从该访问者类派生的一些示例代码,用于进行一些调试(我基于我提到的书中的一些示例代码) prependIndent 方法调用只是字符串上的扩展方法,用于在每个缩进处放置一个“--”等级。
internal class DebugDisplayTree : ExpressionVisitor
{
private int indentLevel = 0;
protected override System.Linq.Expressions.Expression Visit(Expression exp)
{
if (exp != null)
{
Trace.WriteLine(string.Format("{0} : {1} ", exp.NodeType, exp.GetType().ToString()).PrependIndent(indentLevel));
}
indentLevel++;
Expression result = base.Visit(exp);
indentLevel--;
return result;
}
...