Пример #1
0
        public virtual LinqExpression Visit(RelinqScriptExpression astNode)
        {
            switch (astNode.NodeType)
            {
                case ExpressionType.Keyword:
                case ExpressionType.Variable:
                    return VisitObjectReference(astNode);

                case ExpressionType.Constant:
                    return VisitConstant((ConstantExpression)astNode, null);

                case ExpressionType.New:
                    return VisitNew((NewExpression)astNode);

                case ExpressionType.Lambda:
                    return VisitLambda((LambdaExpression)astNode, null);

                case ExpressionType.Field:
                    return VisitField((FieldExpression)astNode);

                case ExpressionType.Invoke:
                    return VisitInvoke((InvokeExpression)astNode);

                case ExpressionType.Indexer:
                    return VisitIndexer((IndexerExpression)astNode);

                case ExpressionType.Operator:
                    return VisitOperator((OperatorExpression)astNode);

                case ExpressionType.Conditional:
                    return VisitConditional((ConditionalExpression)astNode);
            }

            throw new NotSupportedException(astNode.ToString());
        }
Пример #2
0
        public virtual LinqExpression VisitObjectReference(RelinqScriptExpression astNode)
        {
            String refName;
            switch (astNode.NodeType)
            {
                case ExpressionType.Keyword:
                    refName = ((KeywordExpression)astNode).Name;
                    break;
                case ExpressionType.Variable:
                    refName = ((VariableExpression)astNode).Name;
                    break;
                default:
                    throw new NotSupportedException(astNode.ToString());
            }

            return _closure[refName];
        }