Ejemplo n.º 1
0
        protected ShapedQueryExpression TranslateResultSelectorForJoin(
            ShapedQueryExpression outer,
            LambdaExpression resultSelector,
            Expression innerShaper,
            Type transparentIdentifierType,
            bool innerNullable)
        {
            if (innerNullable)
            {
                innerShaper = new EntityShaperNullableMarkingExpressionVisitor().Visit(innerShaper);
            }

            outer.ShaperExpression = CombineShapers(
                outer.QueryExpression,
                outer.ShaperExpression,
                innerShaper,
                transparentIdentifierType);

            var transparentIdentifierParameter = Expression.Parameter(transparentIdentifierType);

            var newResultSelector = Expression.Lambda(
                ReplacingExpressionVisitor.Replace(
                    resultSelector.Parameters[0], AccessOuterTransparentField(transparentIdentifierType, transparentIdentifierParameter),
                    resultSelector.Parameters[1], AccessInnerTransparentField(transparentIdentifierType, transparentIdentifierParameter),
                    resultSelector.Body),
                transparentIdentifierParameter);

            return(TranslateSelect(outer, newResultSelector));
        }
Ejemplo n.º 2
0
        protected virtual ShapedQueryExpression TranslateResultSelectorForJoin(
            ShapedQueryExpression outer,
            LambdaExpression resultSelector,
            Expression innerShaper,
            Type transparentIdentifierType,
            bool innerNullable)
        {
            if (innerNullable)
            {
                innerShaper = new EntityShaperNullableMarkingExpressionVisitor().Visit(innerShaper);
            }

            outer.ShaperExpression = CombineShapers(
                outer.QueryExpression,
                outer.ShaperExpression,
                innerShaper,
                transparentIdentifierType);

            var transparentIdentifierParameter = Expression.Parameter(transparentIdentifierType);

            Expression original1         = resultSelector.Parameters[0];
            Expression replacement1      = AccessOuterTransparentField(transparentIdentifierType, transparentIdentifierParameter);
            Expression original2         = resultSelector.Parameters[1];
            Expression replacement2      = AccessInnerTransparentField(transparentIdentifierType, transparentIdentifierParameter);
            var        newResultSelector = Expression.Lambda(
                new ReplacingExpressionVisitor(
                    new Dictionary <Expression, Expression> {
                { original1, replacement1 },
                { original2, replacement2 }
            }).Visit(resultSelector.Body),
                transparentIdentifierParameter);

            return(TranslateSelect(outer, newResultSelector));
        }
Ejemplo n.º 3
0
 protected QueryableMethodTranslatingExpressionVisitor(
     QueryableMethodTranslatingExpressionVisitorDependencies dependencies,
     bool subquery)
 {
     Dependencies = dependencies;
     _subquery    = subquery;
     _entityShaperNullableMarkingExpressionVisitor = new EntityShaperNullableMarkingExpressionVisitor();
 }
Ejemplo n.º 4
0
        protected QueryableMethodTranslatingExpressionVisitor(
            [NotNull] QueryableMethodTranslatingExpressionVisitorDependencies dependencies,
            bool subquery)
        {
            Check.NotNull(dependencies, nameof(dependencies));

            Dependencies = dependencies;
            _subquery    = subquery;
            _entityShaperNullableMarkingExpressionVisitor = new EntityShaperNullableMarkingExpressionVisitor();
        }