示例#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)));
        }
示例#2
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));
        }
        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)));
        }
示例#4
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)));
        }