Exemple #1
0
            /// <summary>
            ///     Gets the appropriate LINQ expression for an inline ObjectQuery instance.
            /// </summary>
            private Expression InlineObjectQuery(ObjectQuery inlineQuery, Type expressionType)
            {
                DebugCheck.NotNull(inlineQuery);

                Expression queryExpression;

                if (_funcletizer._mode
                    == Mode.CompiledQueryLockdown)
                {
                    // In the lockdown phase, we don't chase down inline object queries because
                    // we don't yet know what the object context is supposed to be.
                    queryExpression = Expression.Constant(inlineQuery, expressionType);
                }
                else
                {
                    if (!ReferenceEquals(_funcletizer._rootContext, inlineQuery.QueryState.ObjectContext))
                    {
                        throw new NotSupportedException(Strings.ELinq_UnsupportedDifferentContexts);
                    }

                    queryExpression = inlineQuery.GetExpression();

                    // If it's not an entity-sql (terminal) query, recursively process
                    if (!(inlineQuery.QueryState is EntitySqlQueryState))
                    {
                        queryExpression = InlineExpression(queryExpression);
                    }

                    queryExpression = TypeSystem.EnsureType(queryExpression, expressionType);
                }

                return(queryExpression);
            }
Exemple #2
0
            /// <summary>
            ///     Compiles a delegate returning the value of the given expression.
            /// </summary>
            private static Func <object> CompileExpression(Expression expression)
            {
                var func = Expression
                           .Lambda <Func <object> >(TypeSystem.EnsureType(expression, typeof(object)))
                           .Compile();

                return(func);
            }
            private Expression InlineObjectQuery(ObjectQuery inlineQuery, Type expressionType)
            {
                Expression expression1;

                if (this._funcletizer._mode == Funcletizer.Mode.CompiledQueryLockdown)
                {
                    expression1 = (Expression)Expression.Constant((object)inlineQuery, expressionType);
                }
                else
                {
                    if (!object.ReferenceEquals((object)this._funcletizer._rootContext, (object)inlineQuery.QueryState.ObjectContext))
                    {
                        throw new NotSupportedException(Strings.ELinq_UnsupportedDifferentContexts);
                    }
                    Expression expression2 = inlineQuery.GetExpression();
                    if (!(inlineQuery.QueryState is EntitySqlQueryState))
                    {
                        expression2 = this.InlineExpression(expression2);
                    }
                    expression1 = TypeSystem.EnsureType(expression2, expressionType);
                }
                return(expression1);
            }
 private static Func <object> CompileExpression(Expression expression)
 {
     return(Expression.Lambda <Func <object> >(TypeSystem.EnsureType(expression, typeof(object)), new ParameterExpression[0]).Compile());
 }