protected override Expression VisitShapedQueryExpression(ShapedQueryExpression shapedQueryExpression) { var shaperBody = InjectEntityMaterializer(shapedQueryExpression.ShaperExpression); var selectExpression = (SelectExpression)shapedQueryExpression.QueryExpression; shaperBody = new RelationalProjectionBindingRemovingExpressionVisitor(selectExpression).Visit(shaperBody); shaperBody = new IncludeCompilingExpressionVisitor(TrackQueryResults).Visit(shaperBody); var indexMapParameter = Expression.Parameter(typeof(int[]), "indexMap"); if (selectExpression.IsNonComposedFromSql()) { shaperBody = new IndexMapInjectingExpressionVisitor(indexMapParameter).Visit(shaperBody); } var shaperLambda = Expression.Lambda( shaperBody, QueryCompilationContext.QueryContextParameter, RelationalProjectionBindingRemovingExpressionVisitor.DataReaderParameter, indexMapParameter, _resultCoordinatorParameter); return(Expression.New( (Async ? typeof(AsyncQueryingEnumerable <>) : typeof(QueryingEnumerable <>)).MakeGenericType(shaperLambda.ReturnType).GetConstructors()[0], Expression.Convert(QueryCompilationContext.QueryContextParameter, typeof(RelationalQueryContext)), Expression.Constant(_querySqlGeneratorFactory), Expression.Constant(_sqlExpressionFactory), Expression.Constant(_parameterNameGeneratorFactory), Expression.Constant(selectExpression), Expression.Constant(shaperLambda.Compile()), Expression.Constant(_contextType), Expression.Constant(_logger))); }
protected override Expression VisitShapedQueryExpression(ShapedQueryExpression shapedQueryExpression) { var selectExpression = (SelectExpression)shapedQueryExpression.QueryExpression; selectExpression.ApplyTags(_tags); var dataReaderParameter = Expression.Parameter(typeof(DbDataReader), "dataReader"); var resultCoordinatorParameter = Expression.Parameter(typeof(ResultCoordinator), "resultCoordinator"); var indexMapParameter = Expression.Parameter(typeof(int[]), "indexMap"); var shaper = new ShaperExpressionProcessingExpressionVisitor( selectExpression, dataReaderParameter, resultCoordinatorParameter, indexMapParameter) .Inject(shapedQueryExpression.ShaperExpression); shaper = InjectEntityMaterializers(shaper); shaper = new RelationalProjectionBindingRemovingExpressionVisitor(selectExpression, dataReaderParameter) .Visit(shaper); shaper = new CustomShaperCompilingExpressionVisitor( dataReaderParameter, resultCoordinatorParameter, IsTracking) .Visit(shaper); IReadOnlyList <string> columnNames = null; if (selectExpression.IsNonComposedFromSql()) { shaper = new IndexMapInjectingExpressionVisitor(indexMapParameter).Visit(shaper); columnNames = selectExpression.Projection.Select(pe => ((ColumnExpression)pe.Expression).Name).ToList(); } var relationalCommandCache = new RelationalCommandCache( Dependencies.MemoryCache, RelationalDependencies.SqlExpressionFactory, RelationalDependencies.ParameterNameGeneratorFactory, RelationalDependencies.QuerySqlGeneratorFactory, _useRelationalNulls, selectExpression); var shaperLambda = (LambdaExpression)shaper; return(Expression.New( typeof(QueryingEnumerable <>).MakeGenericType(shaperLambda.ReturnType).GetConstructors()[0], Expression.Convert(QueryCompilationContext.QueryContextParameter, typeof(RelationalQueryContext)), Expression.Constant(relationalCommandCache), Expression.Constant(columnNames, typeof(IReadOnlyList <string>)), Expression.Constant(shaperLambda.Compile()), Expression.Constant(_contextType), Expression.Constant(_logger))); }
protected override Expression VisitShapedQueryExpression(ShapedQueryExpression shapedQueryExpression) { var selectExpression = (SelectExpression)shapedQueryExpression.QueryExpression; selectExpression.ApplyTags(_tags); var dataReaderParameter = Expression.Parameter(typeof(DbDataReader), "dataReader"); var resultCoordinatorParameter = Expression.Parameter(typeof(ResultCoordinator), "resultCoordinator"); var indexMapParameter = Expression.Parameter(typeof(int[]), "indexMap"); var shaper = new ShaperExpressionProcessingExpressionVisitor( selectExpression, dataReaderParameter, resultCoordinatorParameter, indexMapParameter) .Inject(shapedQueryExpression.ShaperExpression); shaper = InjectEntityMaterializers(shaper); shaper = new RelationalProjectionBindingRemovingExpressionVisitor(selectExpression, dataReaderParameter) .Visit(shaper); shaper = new CustomShaperCompilingExpressionVisitor( dataReaderParameter, resultCoordinatorParameter, IsTracking) .Visit(shaper); if (selectExpression.IsNonComposedFromSql()) { shaper = new IndexMapInjectingExpressionVisitor(indexMapParameter).Visit(shaper); } var shaperLambda = (LambdaExpression)shaper; return(Expression.New( (IsAsync ? typeof(AsyncQueryingEnumerable <>) : typeof(QueryingEnumerable <>)).MakeGenericType(shaperLambda.ReturnType).GetConstructors()[0], Expression.Convert(QueryCompilationContext.QueryContextParameter, typeof(RelationalQueryContext)), Expression.Constant(RelationalDependencies.QuerySqlGeneratorFactory), Expression.Constant(RelationalDependencies.SqlExpressionFactory), Expression.Constant(RelationalDependencies.ParameterNameGeneratorFactory), Expression.Constant(selectExpression), Expression.Constant(shaperLambda.Compile()), Expression.Constant(_contextType), Expression.Constant(_logger))); }