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