internal AggregateQueryProvider(IQueryable queryable, IAggregateQueryable <TEntity> aggregateQueryable, IAggregateFluent <TEntity> aggregateFluent)
        {
            queryable.NotNull(nameof(queryable));
            this.queryProvider      = queryable.Provider.NotNull(nameof(queryable.Provider));
            this.aggregateQueryable = aggregateQueryable.NotNull(nameof(aggregateQueryable));
            AggregateFluent         = aggregateFluent.NotNull(nameof(aggregateFluent));

            AddQueryToPipeline(queryable);
        }
Exemplo n.º 2
0
        public static IAggregateQueryableIncluded <TEntity, TProperty> Include <TEntity, TProperty>(
            this IAggregateQueryable <TEntity> query,
            Expression <Func <TEntity, TProperty> > navigationPath)
        {
            query.NotNull(nameof(query));
            navigationPath.NotNull(nameof(navigationPath));

            var aggregateQueryable = CastToAggregateQueryable(query);

            ResolveMemberInfoAndPredicate(navigationPath, out var navigationMember, out var predicate);
            navigationMember.EnsureMemberIsCustomType();

            ApplyLookup <TEntity, TEntity, TProperty>(aggregateQueryable, navigationMember, null,
                                                      out var navigationElementName, out var asFieldName);

            ApplyPredicate <TEntity, TProperty>(aggregateQueryable, predicate, asFieldName);

            ApplyProjection <TEntity, TProperty>(aggregateQueryable, asFieldName, navigationElementName);

            return(new AggregateQueryableIncluded <TEntity, TProperty>(aggregateQueryable, navigationElementName));
        }