/// <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); }
/// <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()); }