Exemple #1
0
        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)));
        }
Exemple #2
0
        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));
        }
Exemple #3
0
        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));
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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));
        }
Exemple #6
0
        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)));
        }
Exemple #8
0
        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)));
        }
Exemple #9
0
        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)));
        }