private static Expression HandleContains( EntityQueryModelVisitor entityQueryModelVisitor, ContainsResultOperator containsResultOperator, QueryModel queryModel) { var item = entityQueryModelVisitor .ReplaceClauseReferences( containsResultOperator.Item, queryModel.MainFromClause); return(CallWithPossibleCancellationToken( entityQueryModelVisitor.LinqOperatorProvider.Contains .MakeGenericMethod(entityQueryModelVisitor.StreamedSequenceInfo.ResultItemType), entityQueryModelVisitor.Expression, item)); }
public virtual void FindQuerySourcesRequiringMaterialization( [NotNull] EntityQueryModelVisitor queryModelVisitor, [NotNull] QueryModel queryModel) { Check.NotNull(queryModelVisitor, nameof(queryModelVisitor)); Check.NotNull(queryModel, nameof(queryModel)); _querySourcesRequiringMaterialization = _requiresMaterializationExpressionVisitorFactory .Create(queryModelVisitor) .FindQuerySourcesRequiringMaterialization(queryModel); foreach (var groupJoinClause in queryModel.BodyClauses.OfType <GroupJoinClause>()) { _querySourcesRequiringMaterialization.Add(groupJoinClause.JoinClause); } }
public virtual Expression HandleResultOperator( EntityQueryModelVisitor entityQueryModelVisitor, ResultOperatorBase resultOperator, QueryModel queryModel) { Check.NotNull(entityQueryModelVisitor, nameof(entityQueryModelVisitor)); Check.NotNull(resultOperator, nameof(resultOperator)); Check.NotNull(queryModel, nameof(queryModel)); ResultHandler handler; if (!_handlers.TryGetValue(resultOperator.GetType(), out handler)) { throw new NotImplementedException(resultOperator.GetType().ToString()); } return(handler(entityQueryModelVisitor, resultOperator, queryModel)); }
private static Expression HandleCast( EntityQueryModelVisitor entityQueryModelVisitor, CastResultOperator castResultOperator) { var resultItemTypeInfo = entityQueryModelVisitor.Expression.Type .GetSequenceType().GetTypeInfo(); if (castResultOperator.CastItemType.GetTypeInfo() .IsAssignableFrom(resultItemTypeInfo)) { return(entityQueryModelVisitor.Expression); } return(Expression.Call( entityQueryModelVisitor.LinqOperatorProvider .Cast.MakeGenericMethod(castResultOperator.CastItemType), entityQueryModelVisitor.Expression)); }
private static Expression HandleAll( EntityQueryModelVisitor entityQueryModelVisitor, AllResultOperator allResultOperator, QueryModel queryModel) { var predicate = entityQueryModelVisitor .ReplaceClauseReferences( allResultOperator.Predicate, queryModel.MainFromClause); return(Expression.Call( _all.MakeGenericMethod(typeof(QuerySourceScope)), entityQueryModelVisitor.CreateScope( entityQueryModelVisitor.Expression, entityQueryModelVisitor.StreamedSequenceInfo.ResultItemType, queryModel.MainFromClause), Expression.Lambda(predicate, EntityQueryModelVisitor.QuerySourceScopeParameter))); }
private static Expression HandleAll( EntityQueryModelVisitor entityQueryModelVisitor, AllResultOperator allResultOperator, QueryModel queryModel) { var predicate = entityQueryModelVisitor .ReplaceClauseReferences( allResultOperator.Predicate, queryModel.MainFromClause); return(CallWithPossibleCancellationToken( entityQueryModelVisitor.LinqOperatorProvider.All .MakeGenericMethod(typeof(QueryResultScope)), entityQueryModelVisitor.CreateScope( entityQueryModelVisitor.Expression, entityQueryModelVisitor.StreamedSequenceInfo.ResultItemType, queryModel.MainFromClause), Expression.Lambda(predicate, EntityQueryModelVisitor.QueryResultScopeParameter))); }
private static Expression HandleAll( EntityQueryModelVisitor entityQueryModelVisitor, AllResultOperator allResultOperator, QueryModel queryModel) { var sequenceType = entityQueryModelVisitor.Expression.Type.GetSequenceType(); var predicate = entityQueryModelVisitor .ReplaceClauseReferences( allResultOperator.Predicate, queryModel.MainFromClause); return(CallWithPossibleCancellationToken( entityQueryModelVisitor.LinqOperatorProvider.All .MakeGenericMethod(sequenceType), entityQueryModelVisitor.Expression, Expression.Lambda(predicate, entityQueryModelVisitor.CurrentParameter))); }
public virtual Expression HandleResultOperator( EntityQueryModelVisitor entityQueryModelVisitor, IStreamedDataInfo streamedDataInfo, ResultOperatorBase resultOperator, QueryModel queryModel) { Check.NotNull(entityQueryModelVisitor, "entityQueryModelVisitor"); Check.NotNull(streamedDataInfo, "streamedDataInfo"); Check.NotNull(resultOperator, "resultOperator"); Check.NotNull(queryModel, "queryModel"); return (Expression.Call( _executeResultOperatorMethodInfo .MakeGenericMethod( entityQueryModelVisitor.StreamedSequenceInfo.ResultItemType, streamedDataInfo.DataType), entityQueryModelVisitor.Expression, Expression.Constant(resultOperator), Expression.Constant(entityQueryModelVisitor.StreamedSequenceInfo))); }
public virtual Expression HandleResultOperator( EntityQueryModelVisitor entityQueryModelVisitor, ResultOperatorBase resultOperator, QueryModel queryModel) { Check.NotNull(entityQueryModelVisitor, "entityQueryModelVisitor"); Check.NotNull(resultOperator, "resultOperator"); Check.NotNull(queryModel, "queryModel"); Func <Expression, Type, ResultOperatorBase, Expression> asyncHandler; if (!_asyncHandlers.TryGetValue(resultOperator.GetType(), out asyncHandler)) { // TODO: Implement the rest... throw new NotImplementedException(); } return(asyncHandler( entityQueryModelVisitor.Expression, entityQueryModelVisitor.StreamedSequenceInfo.ResultItemType, resultOperator)); }
private static Expression HandleGroup( EntityQueryModelVisitor entityQueryModelVisitor, GroupResultOperator groupResultOperator, QueryModel queryModel) { var sequenceType = entityQueryModelVisitor.Expression.Type.GetSequenceType(); var keySelector = entityQueryModelVisitor .ReplaceClauseReferences( groupResultOperator.KeySelector, queryModel.MainFromClause); var elementSelector = entityQueryModelVisitor .ReplaceClauseReferences( groupResultOperator.ElementSelector, queryModel.MainFromClause); var expression = Expression.Call( entityQueryModelVisitor.LinqOperatorProvider.GroupBy .MakeGenericMethod( sequenceType, keySelector.Type, elementSelector.Type), entityQueryModelVisitor.Expression, Expression.Lambda(keySelector, entityQueryModelVisitor.CurrentParameter), Expression.Lambda(elementSelector, entityQueryModelVisitor.CurrentParameter)); entityQueryModelVisitor.CurrentParameter = Expression.Parameter(sequenceType, groupResultOperator.ItemName); entityQueryModelVisitor .AddOrUpdateMapping(groupResultOperator, entityQueryModelVisitor.CurrentParameter); return(expression); }
protected Expression VisitProjectionSubQuery( SubQueryExpression expression, EntityQueryModelVisitor queryModelVisitor) { queryModelVisitor.VisitQueryModel(expression.QueryModel); var subExpression = queryModelVisitor._expression; if (queryModelVisitor._streamedSequenceInfo == null) { return(subExpression); } if (typeof(IQueryable).GetTypeInfo().IsAssignableFrom(expression.Type.GetTypeInfo())) { subExpression = Expression.Call( _asQueryableShim.MakeGenericMethod( queryModelVisitor._streamedSequenceInfo.ResultItemType), subExpression); } return(Expression.Convert(subExpression, expression.Type)); }
public virtual Expression HandleResultOperator( EntityQueryModelVisitor entityQueryModelVisitor, ResultOperatorBase resultOperator, QueryModel queryModel) { Check.NotNull(entityQueryModelVisitor, nameof(entityQueryModelVisitor)); Check.NotNull(resultOperator, nameof(resultOperator)); Check.NotNull(queryModel, nameof(queryModel)); var relationalQueryModelVisitor = (RelationalQueryModelVisitor)entityQueryModelVisitor; var selectExpression = relationalQueryModelVisitor .TryGetQuery(queryModel.MainFromClause); var handlerContext = new HandlerContext( _resultOperatorHandler, relationalQueryModelVisitor, resultOperator, queryModel, selectExpression); Func <HandlerContext, Expression> resultHandler; if (relationalQueryModelVisitor.RequiresClientFilter || relationalQueryModelVisitor.RequiresClientResultOperator || relationalQueryModelVisitor.RequiresClientSelectMany || !_resultHandlers.TryGetValue(resultOperator.GetType(), out resultHandler) || selectExpression == null) { return(handlerContext.EvalOnClient); } return(resultHandler(handlerContext)); }
private static Expression HandleMin(EntityQueryModelVisitor entityQueryModelVisitor) { return(HandleAggregate(entityQueryModelVisitor, "Min")); }
private static Expression HandleTake( EntityQueryModelVisitor entityQueryModelVisitor, TakeResultOperator takeResultOperator) => Expression.Call( entityQueryModelVisitor.LinqOperatorProvider.Take .MakeGenericMethod(entityQueryModelVisitor.Expression.Type.GetSequenceType()), entityQueryModelVisitor.Expression, takeResultOperator.Count);
private static Expression HandleAggregate(EntityQueryModelVisitor entityQueryModelVisitor, string methodName) => CallWithPossibleCancellationToken( entityQueryModelVisitor.LinqOperatorProvider.GetAggregateMethod( methodName, entityQueryModelVisitor.Expression.Type.GetSequenceType()), entityQueryModelVisitor.Expression);
private static Expression HandleSkip( EntityQueryModelVisitor entityQueryModelVisitor, SkipResultOperator skipResultOperator) => Expression.Call( entityQueryModelVisitor.LinqOperatorProvider.Skip .MakeGenericMethod(entityQueryModelVisitor.Expression.Type.GetSequenceType()), entityQueryModelVisitor.Expression, skipResultOperator.Count);
private static Expression HandleSum(EntityQueryModelVisitor entityQueryModelVisitor) => HandleAggregate(entityQueryModelVisitor, "Sum");
public virtual EntityQueryModelVisitor CreateQueryModelVisitor( [CanBeNull] EntityQueryModelVisitor parentEntityQueryModelVisitor) => _entityQueryModelVisitorFactory.Create(this, parentEntityQueryModelVisitor);
private static Expression HandleMax(EntityQueryModelVisitor entityQueryModelVisitor) => HandleAggregate(entityQueryModelVisitor, "Max");
public RequiresEntityMaterializationExpressionTreeVisitor(EntityQueryModelVisitor queryModelVisitor) { _queryModelVisitor = queryModelVisitor; }
private static Expression HandleAverage(EntityQueryModelVisitor entityQueryModelVisitor) => HandleAggregate(entityQueryModelVisitor, "Average");
protected QueryingExpressionTreeVisitor(EntityQueryModelVisitor parentQueryModelVisitor) { _parentQueryModelVisitor = parentQueryModelVisitor; }
protected EntityQueryModelVisitor(EntityQueryModelVisitor parentQueryModelVisitor) : this(new LinqOperatorProvider(), parentQueryModelVisitor) { }
public ProjectionExpressionTreeVisitor([NotNull] EntityQueryModelVisitor entityQueryModelVisitor) : base(entityQueryModelVisitor) { }
protected QueryingExpressionTreeVisitor([NotNull] EntityQueryModelVisitor entityQueryModelVisitor) : base(entityQueryModelVisitor) { }
public DefaultExpressionTreeVisitor([NotNull] EntityQueryModelVisitor entityQueryModelVisitor) { Check.NotNull(entityQueryModelVisitor, "entityQueryModelVisitor"); _entityQueryModelVisitor = entityQueryModelVisitor; }
private static Expression HandleAny(EntityQueryModelVisitor entityQueryModelVisitor) => CallWithPossibleCancellationToken( entityQueryModelVisitor.LinqOperatorProvider.Any .MakeGenericMethod(entityQueryModelVisitor.Expression.Type.GetSequenceType()), entityQueryModelVisitor.Expression);
private static Expression HandleDistinct(EntityQueryModelVisitor entityQueryModelVisitor) => Expression.Call( entityQueryModelVisitor.LinqOperatorProvider.Distinct .MakeGenericMethod(entityQueryModelVisitor.Expression.Type.GetSequenceType()), entityQueryModelVisitor.Expression);
public abstract EntityQueryModelVisitor CreateQueryModelVisitor( [CanBeNull] EntityQueryModelVisitor parentEntityQueryModelVisitor);
protected abstract ExpressionTreeVisitor CreateProjectionExpressionTreeVisitor(EntityQueryModelVisitor parentQueryModelVisitor);