private static Expression HandleGroup( EntityQueryModelVisitor entityQueryModelVisitor, GroupResultOperator groupResultOperator, QueryModel queryModel) { var keySelector = entityQueryModelVisitor .ReplaceClauseReferences( groupResultOperator.KeySelector, queryModel.MainFromClause); var elementSelector = entityQueryModelVisitor .ReplaceClauseReferences( groupResultOperator.ElementSelector, queryModel.MainFromClause); return(Expression.Call( entityQueryModelVisitor.LinqOperatorProvider.GroupBy .MakeGenericMethod( typeof(QuerySourceScope), groupResultOperator.KeySelector.Type, groupResultOperator.ElementSelector.Type), entityQueryModelVisitor.CreateScope( entityQueryModelVisitor.Expression, entityQueryModelVisitor.StreamedSequenceInfo.ResultItemType, queryModel.MainFromClause), Expression.Lambda(keySelector, EntityQueryModelVisitor.QuerySourceScopeParameter), Expression.Lambda(elementSelector, EntityQueryModelVisitor.QuerySourceScopeParameter))); }
private static Expression HandleDefaultIfEmpty( EntityQueryModelVisitor entityQueryModelVisitor, DefaultIfEmptyResultOperator defaultIfEmptyResultOperator, QueryModel queryModel) { if (defaultIfEmptyResultOperator.OptionalDefaultValue == null) { return(Expression.Call( entityQueryModelVisitor.LinqOperatorProvider.DefaultIfEmpty .MakeGenericMethod(entityQueryModelVisitor.Expression.Type.GetSequenceType()), entityQueryModelVisitor.Expression)); } var optionalDefaultValue = entityQueryModelVisitor .ReplaceClauseReferences( defaultIfEmptyResultOperator.OptionalDefaultValue, queryModel.MainFromClause); return(Expression.Call( entityQueryModelVisitor.LinqOperatorProvider.DefaultIfEmptyArg .MakeGenericMethod(entityQueryModelVisitor.Expression.Type.GetSequenceType()), entityQueryModelVisitor.Expression, optionalDefaultValue)); }
private static Expression HandleDefaultIfEmpty( EntityQueryModelVisitor entityQueryModelVisitor, DefaultIfEmptyResultOperator defaultIfEmptyResultOperator, QueryModel queryModel) { if (defaultIfEmptyResultOperator.OptionalDefaultValue == null) { return(Expression.Call( entityQueryModelVisitor.LinqOperatorProvider.DefaultIfEmpty .MakeGenericMethod(entityQueryModelVisitor.StreamedSequenceInfo.ResultItemType), entityQueryModelVisitor.Expression)); } var optionalDefaultValue = entityQueryModelVisitor .ReplaceClauseReferences( defaultIfEmptyResultOperator.OptionalDefaultValue, queryModel.MainFromClause); return(Expression.Call( entityQueryModelVisitor.LinqOperatorProvider.DefaultIfEmptyArg .MakeGenericMethod(typeof(QuerySourceScope)), entityQueryModelVisitor.CreateScope( entityQueryModelVisitor.Expression, entityQueryModelVisitor.StreamedSequenceInfo.ResultItemType, queryModel.MainFromClause), optionalDefaultValue)); }
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); }
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)); }
private Expression ReplaceClauseReferences(Expression expression) { var isNestedQuery = _parentQueryModelVisitor != null; var resultExpression = ReferenceReplacingExpressionTreeVisitor .ReplaceClauseReferences( expression, _querySourceMapping, throwOnUnmappedReferences: !isNestedQuery); if (isNestedQuery) { resultExpression = _parentQueryModelVisitor.ReplaceClauseReferences(resultExpression); } return(resultExpression); }
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 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))); }
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))); }