/// <exclude />
        public S Execute <S>(Expression expression)
        {
            var visitor = new StoreIdFilterQueryableExpressionVisitor();

            visitor.Visit(_currentExpression);

            if (visitor.FoundStoreId == _storeId)
            {
                var sourceChangingVisitor = new StoreIdFilterQueryableChangeSourceExpressionVisitor();

                Expression newExpression = sourceChangingVisitor.Visit(expression);

                return(_originalQueryable.Provider.Execute <S>(newExpression));
            }
            else
            {
                List <T> emptyList = new List <T>();

                var sourceChangingVisitor = new StoreIdFilterQueryableChangeSourceExpressionVisitor(emptyList.AsQueryable().Expression);

                Expression newExpression = sourceChangingVisitor.Visit(expression);

                return(emptyList.AsQueryable().Provider.Execute <S>(newExpression));
            }
        }
        /// <exclude />
        public IQueryable <S> CreateQuery <S>(Expression expression)
        {
            var visitor = new StoreIdFilterQueryableChangeSourceExpressionVisitor();

            Expression newExpression = visitor.Visit(expression);

            IQueryable <S> newOriginalQueryable = _originalQueryable.Provider.CreateQuery <S>(newExpression);

            return(new StoreIdFilterQueryable <S>(newOriginalQueryable, _storeId, expression));
        }