protected virtual IQueryable <TResource> ApplyQueryLayer(QueryLayer layer)
        {
            _traceWriter.LogMethodStart(new { layer });
            if (layer == null)
            {
                throw new ArgumentNullException(nameof(layer));
            }

            IQueryable <TResource> source = GetAll();

            var queryableHandlers = _constraintProviders
                                    .SelectMany(p => p.GetConstraints())
                                    .Where(expressionInScope => expressionInScope.Scope == null)
                                    .Select(expressionInScope => expressionInScope.Expression)
                                    .OfType <QueryableHandlerExpression>()
                                    .ToArray();

            foreach (var queryableHandler in queryableHandlers)
            {
                source = queryableHandler.Apply(source);
            }

            var nameFactory = new LambdaParameterNameFactory();
            var builder     = new QueryableBuilder(source.Expression, source.ElementType, typeof(Queryable), nameFactory, _resourceFactory, _resourceGraph, _dbContext.Model);

            var expression = builder.ApplyQuery(layer);

            return(source.Provider.CreateQuery <TResource>(expression));
        }
示例#2
0
 public MongoQueryableBuilder(Expression source, Type elementType, Type extensionType, LambdaParameterNameFactory nameFactory,
                              IResourceFactory resourceFactory, IModel entityModel, LambdaScopeFactory?lambdaScopeFactory = null)
     : base(source, elementType, extensionType, nameFactory, resourceFactory, entityModel, lambdaScopeFactory)
 {
     _elementType        = elementType;
     _extensionType      = extensionType;
     _nameFactory        = nameFactory;
     _lambdaScopeFactory = lambdaScopeFactory ?? new LambdaScopeFactory(nameFactory);
 }
 public MongoDbQueryableBuilder(Expression source, Type elementType, Type extensionType,
                                LambdaParameterNameFactory nameFactory, IResourceFactory resourceFactory,
                                IResourceContextProvider resourceContextProvider, IModel entityModel,
                                LambdaScopeFactory lambdaScopeFactory = null)
     : base(source, elementType, extensionType, nameFactory, resourceFactory, resourceContextProvider,
            entityModel, lambdaScopeFactory)
 {
     _elementType        = elementType ?? throw new ArgumentNullException(nameof(elementType));
     _extensionType      = extensionType ?? throw new ArgumentNullException(nameof(extensionType));
     _lambdaScopeFactory = lambdaScopeFactory ?? new LambdaScopeFactory(nameFactory);
 }
        protected virtual IQueryable <TResource> ApplyQueryLayer(QueryLayer layer)
        {
            _traceWriter.LogMethodStart(new
            {
                layer
            });

            ArgumentGuard.NotNull(layer, nameof(layer));

            QueryLayer rewrittenLayer = layer;

            if (EntityFrameworkCoreSupport.Version.Major < 5)
            {
                var writer = new MemoryLeakDetectionBugRewriter();
                rewrittenLayer = writer.Rewrite(layer);
            }

            IQueryable <TResource> source = GetAll();

            // @formatter:wrap_chained_method_calls chop_always
            // @formatter:keep_existing_linebreaks true

            QueryableHandlerExpression[] queryableHandlers = _constraintProviders
                                                             .SelectMany(provider => provider.GetConstraints())
                                                             .Where(expressionInScope => expressionInScope.Scope == null)
                                                             .Select(expressionInScope => expressionInScope.Expression)
                                                             .OfType <QueryableHandlerExpression>()
                                                             .ToArray();

            // @formatter:keep_existing_linebreaks restore
            // @formatter:wrap_chained_method_calls restore

            foreach (QueryableHandlerExpression queryableHandler in queryableHandlers)
            {
                source = queryableHandler.Apply(source);
            }

            var nameFactory = new LambdaParameterNameFactory();

            var builder = new QueryableBuilder(source.Expression, source.ElementType, typeof(Queryable), nameFactory, _resourceFactory, _resourceGraph,
                                               _dbContext.Model);

            Expression expression = builder.ApplyQuery(rewrittenLayer);

            return(source.Provider.CreateQuery <TResource>(expression));
        }
示例#5
0
        protected virtual IMongoQueryable <TResource> ApplyQueryLayer(QueryLayer layer)
        {
            if (layer == null)
            {
                throw new ArgumentNullException(nameof(layer));
            }

            var queryExpressionValidator = new MongoDbQueryExpressionValidator();

            queryExpressionValidator.Validate(layer);

            AssertNoRelationshipsInSparseFieldSets();

            var source = GetAll();

            var queryableHandlers = _constraintProviders
                                    .SelectMany(p => p.GetConstraints())
                                    .Where(expressionInScope => expressionInScope.Scope == null)
                                    .Select(expressionInScope => expressionInScope.Expression)
                                    .OfType <QueryableHandlerExpression>()
                                    .ToArray();

            foreach (var queryableHandler in queryableHandlers)
            {
                source = queryableHandler.Apply(source);
            }

            var nameFactory = new LambdaParameterNameFactory();
            var builder     = new MongoDbQueryableBuilder(
                source.Expression,
                source.ElementType,
                typeof(Queryable),
                nameFactory,
                _resourceFactory,
                _resourceContextProvider,
                new MongoDbModel(_resourceContextProvider));

            var expression = builder.ApplyQuery(layer);

            return((IMongoQueryable <TResource>)source.Provider.CreateQuery <TResource>(expression));
        }
#pragma warning disable AV1130 // Return type in method signature should be an interface to an unchangeable collection
    protected virtual IMongoQueryable <TResource> ApplyQueryLayer(QueryLayer queryLayer)
#pragma warning restore AV1130 // Return type in method signature should be an interface to an unchangeable collection
    {
        ArgumentGuard.NotNull(queryLayer, nameof(queryLayer));

        var queryExpressionValidator = new MongoQueryExpressionValidator();

        queryExpressionValidator.Validate(queryLayer);

        AssertNoRelationshipsInSparseFieldSets();

        IQueryable <TResource> source = GetAll();

        // @formatter:wrap_chained_method_calls chop_always
        // @formatter:keep_existing_linebreaks true

        QueryableHandlerExpression[] queryableHandlers = _constraintProviders
                                                         .SelectMany(provider => provider.GetConstraints())
                                                         .Where(expressionInScope => expressionInScope.Scope == null)
                                                         .Select(expressionInScope => expressionInScope.Expression)
                                                         .OfType <QueryableHandlerExpression>()
                                                         .ToArray();

        // @formatter:keep_existing_linebreaks restore
        // @formatter:wrap_chained_method_calls restore

        foreach (QueryableHandlerExpression queryableHandler in queryableHandlers)
        {
            source = queryableHandler.Apply(source);
        }

        var nameFactory = new LambdaParameterNameFactory();

        var builder = new MongoQueryableBuilder(source.Expression, source.ElementType, typeof(Queryable), nameFactory, _resourceFactory,
                                                new MongoModel(_resourceGraph));

        Expression expression = builder.ApplyQuery(queryLayer);

        return((IMongoQueryable <TResource>)source.Provider.CreateQuery <TResource>(expression));
    }
 public MongoWhereClauseBuilder(Expression source, LambdaScope lambdaScope, Type extensionType, LambdaParameterNameFactory nameFactory)
     : base(source, lambdaScope, extensionType, nameFactory)
 {
 }