public static Expression ResolveExpression (
Expression expression,
IMappingResolver resolver,
IMappingResolutionStage stage,
IMappingResolutionContext context,
UniqueIdentifierGenerator generator,
SqlStatementBuilder sqlStatementBuilder)
{
ArgumentUtility.CheckNotNull ("expression", expression);
ArgumentUtility.CheckNotNull ("resolver", resolver);
ArgumentUtility.CheckNotNull ("stage", stage);
ArgumentUtility.CheckNotNull ("context", context);
ArgumentUtility.CheckNotNull ("generator", generator);
ArgumentUtility.CheckNotNull ("sqlStatementBuilder", sqlStatementBuilder);
var entityIdentityResolver = new EntityIdentityResolver (stage, resolver, context);
var comparisonSplitter = new CompoundExpressionComparisonSplitter ();
var namedExpressionCombiner = new NamedExpressionCombiner (context);
var groupAggregateSimplifier = new GroupAggregateSimplifier (stage, context);
var visitor1 = new ResolvingSelectExpressionVisitor (
resolver,
stage,
context,
generator,
entityIdentityResolver,
comparisonSplitter,
namedExpressionCombiner,
groupAggregateSimplifier,
false,
sqlStatementBuilder);
var result1 = visitor1.VisitExpression (expression);
var visitor2 = new ResolvingSelectExpressionVisitor (
resolver,
stage,
context,
generator,
entityIdentityResolver,
comparisonSplitter,
namedExpressionCombiner,
groupAggregateSimplifier,
true,
sqlStatementBuilder);
var result2 = visitor2.VisitExpression (result1);
return result2;
}