System.Linq.QueryableTransformer.UnquoteIfNeeded C# (CSharp) Метод

UnquoteIfNeeded() статический приватный Метод

static private UnquoteIfNeeded ( Expression expression, Type delegateType ) : Expression
expression System.Linq.Expressions.Expression
delegateType System.Type
Результат System.Linq.Expressions.Expression
		static Expression UnquoteIfNeeded (Expression expression, Type delegateType)
		{
			if (expression.NodeType != ExpressionType.Quote)
				return expression;

			var lambda = (LambdaExpression) ((UnaryExpression) expression).Operand;
			if (lambda.Type == delegateType)
				return lambda;

			return expression;
		}

Usage Example

        private MethodCallExpression ReplaceQueryableMethod(MethodCallExpression old)
        {
            Expression obj = null;

            if (old.Object != null)
            {
                obj = this.Visit(old.Object);
            }
            MethodInfo methodInfo = QueryableTransformer.ReplaceQueryableMethod(old.Method);

            ParameterInfo[] parameters = methodInfo.GetParameters();
            Expression[]    array      = new Expression[old.Arguments.Count];
            for (int i = 0; i < array.Length; i++)
            {
                array[i] = QueryableTransformer.UnquoteIfNeeded(this.Visit(old.Arguments[i]), parameters[i].ParameterType);
            }
            return(new MethodCallExpression(obj, methodInfo, array.ToReadOnlyCollection <Expression>()));
        }