示例#1
0
        /// <summary>
        /// Applies the minimal transformations required before parametrization,
        /// expression key computing and parsing.
        /// </summary>
        /// <param name="expression">The expression to transform.</param>
        /// <param name="parameters">The parameters used in the transformation process.</param>
        /// <returns><see cref="PreTransformationResult"/> that contains the transformed expression.</returns>
        public static PreTransformationResult PreTransform(Expression expression, PreTransformationParameters parameters)
        {
            parameters.EvaluatableExpressionFilter = new NhEvaluatableExpressionFilter(parameters.SessionFactory);
            parameters.QueryVariables = new Dictionary <ConstantExpression, QueryVariable>();

            var partiallyEvaluatedExpression = NhPartialEvaluatingExpressionVisitor
                                               .EvaluateIndependentSubtrees(expression, parameters);

            return(new PreTransformationResult(
                       PreProcessor.Process(partiallyEvaluatedExpression),
                       parameters.SessionFactory,
                       parameters.QueryVariables));
        }
示例#2
0
        public void ConstantInWhereDoesNotCauseManyKeys()
        {
            var q1 = (from c in db.Customers
                      where c.CustomerId == "ALFKI"
                      select c);
            var q2 = (from c in db.Customers
                      where c.CustomerId == "ANATR"
                      select c);
            var preTransformParameters = new PreTransformationParameters(QueryMode.Select, Sfi);
            var preTransformResult     = NhRelinqQueryParser.PreTransform(q1.Expression, preTransformParameters);
            var parameters1            = ExpressionParameterVisitor.Visit(preTransformResult);
            var k1 = ExpressionKeyVisitor.Visit(preTransformResult.Expression, parameters1, Sfi);

            var preTransformResult2 = NhRelinqQueryParser.PreTransform(q2.Expression, preTransformParameters);
            var parameters2         = ExpressionParameterVisitor.Visit(preTransformResult2);
            var k2 = ExpressionKeyVisitor.Visit(preTransformResult2.Expression, parameters2, Sfi);

            Assert.That(parameters1, Has.Count.GreaterThan(0), "parameters1");
            Assert.That(parameters2, Has.Count.GreaterThan(0), "parameters2");
            Assert.That(k2, Is.EqualTo(k1));
        }