protected override Expression VisitEntityQueryable(Type elementType) { var relationalQueryCompilationContext = ((RelationalQueryCompilationContext)QueryCompilationContext); var queryMethodInfo = relationalQueryCompilationContext.EnumerableMethodProvider.QueryValues; var entityType = QueryCompilationContext.Model.GetEntityType(elementType); var selectExpression = new SelectExpression(elementType) { TableSource = entityType.StorageName }; _queryModelVisitor._queriesBySource.Add(_querySource, selectExpression); if (_queryModelVisitor.QuerySourceRequiresMaterialization(_querySource)) { foreach (var property in entityType.Properties) { selectExpression.AddToProjection(property); } queryMethodInfo = relationalQueryCompilationContext.EnumerableMethodProvider.QueryEntities .MakeGenericMethod(elementType); } return(Expression.Call( queryMethodInfo, QueryContextParameter, Expression.Constant(new CommandBuilder(selectExpression, relationalQueryCompilationContext)))); }
protected override Expression VisitEntityQueryable(Type elementType) { var relationalQueryCompilationContext = ((RelationalQueryCompilationContext)QueryCompilationContext); var queryMethodInfo = CreateValueReaderMethodInfo; var entityType = QueryCompilationContext.Model.GetEntityType(elementType); var selectExpression = new SelectExpression(); var tableName = entityType.TableName(); selectExpression .AddTable( new TableExpression( tableName, entityType.Schema(), _querySource.ItemName.StartsWith("<generated>_") ? tableName.First().ToString().ToLower() : _querySource.ItemName, _querySource)); _queryModelVisitor._queriesBySource.Add(_querySource, selectExpression); var queryMethodArguments = new List <Expression> { Expression.Constant(_querySource), QueryContextParameter, QuerySourceScopeParameter, _readerParameter }; if (_queryModelVisitor.QuerySourceRequiresMaterialization(_querySource)) { foreach (var property in entityType.Properties) { selectExpression.AddToProjection(property, _querySource); } queryMethodInfo = CreateEntityMethodInfo.MakeGenericMethod(elementType); queryMethodArguments.Add(Expression.Constant(0)); } return(Expression.Call( relationalQueryCompilationContext.QueryMethodProvider.QueryMethod .MakeGenericMethod(queryMethodInfo.ReturnType), QueryContextParameter, Expression.Constant(new CommandBuilder(selectExpression, relationalQueryCompilationContext)), Expression.Lambda( Expression.Call(queryMethodInfo, queryMethodArguments), _readerParameter))); }
protected override Expression VisitEntityQueryable(Type elementType) { var queryMethodInfo = _queryModelVisitor._enumerableMethodProvider.QueryValues; var entityType = QueryCompilationContext.Model.GetEntityType(elementType); var entityQuery = new SqlSelect().SetTableSource(entityType.StorageName); _queryModelVisitor._queriesBySource.Add(_querySource, entityQuery); if (_queryModelVisitor.QuerySourceRequiresMaterialization(_querySource)) { foreach (var property in entityType.Properties) { entityQuery.AddToProjection(property); } queryMethodInfo = _queryModelVisitor._enumerableMethodProvider.QueryEntities .MakeGenericMethod(elementType); } return(Expression.Call( queryMethodInfo, QueryContextParameter, Expression.Constant(entityQuery))); }