/// <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 IEnumerator <T> GetEnumerator()
        {
            var visitor = new StoreIdFilterQueryableExpressionVisitor();

            visitor.Visit(_currentExpression);

            if (visitor.FoundStoreId == null)
            {
                throw new InvalidOperationException("Missing storeId test found in where");
            }

            if (visitor.FoundStoreId != _storeId)
            {
                return(new List <T>().GetEnumerator());
            }

            return(FilterByStoreId(_originalQueryable).GetEnumerator());
        }