Пример #1
0
        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);
        }