internal R Translate <R>(Expression expression, Func <ITranslateResult, R> continuation) //For debugging purposes { AliasGenerator aliasGenerator = new AliasGenerator(); ITranslateResult result; using (HeavyProfiler.Log("LINQ", () => expression.ToString())) using (var log = HeavyProfiler.LogNoStackTrace("Clean")) { Expression cleaned = Clean(expression, true, log) !; var binder = new QueryBinder(aliasGenerator); log.Switch("Bind"); ProjectionExpression binded = (ProjectionExpression)binder.BindQuery(cleaned); ProjectionExpression optimized = (ProjectionExpression)Optimize(binded, binder, aliasGenerator, log); log.Switch("ChPrjFlatt"); ProjectionExpression flat = ChildProjectionFlattener.Flatten(optimized, aliasGenerator); log.Switch("TB"); result = TranslatorBuilder.Build(flat); } return(continuation(result)); }