protected override Expression VisitMethodCall(MethodCallExpression node) { var obj = Visit(node.Object); var args = Visit(node.Arguments, Visit); if (obj != node.Object || args != node.Arguments) { node = Expression.Call(obj, node.Method, args); } Expression final; switch (node.Method.Name) { case FilterMethod.Contains: case FilterMethod.Equals: final = node.Object == null ? node : ExpressionHelpers.BoolIfNotNull(node.Object, node); break; case FilterMethod.ToString: final = node.Object == null ? node : ExpressionHelpers.NullConditional(node.Object, node); break; default: final = CatchNullReference(node); break; } return(final); }