internal static IQueryProvider IncludeInternal <T>(this IQueryable <T> query, string path)
        {
            if (query.Provider is IncludeQueryProvider includeQueryProvider)
            {
                includeQueryProvider = new IncludeQueryProvider(typeof(T), includeQueryProvider);
            }
            else if (query.Provider is DefaultQueryProvider defaultQueryProvider)
            {
                includeQueryProvider = new IncludeQueryProvider(typeof(T), defaultQueryProvider);
            }
            else
            {
                return(query.Provider);
            }

            includeQueryProvider.Include(path);
            return(includeQueryProvider);
        }
        internal static IncludeQueryProvider IncludeInternal <T>(this IQueryable <T> query, string path)
        {
            if (!(query.Provider is INhQueryProvider))
            {
                throw new InvalidOperationException("Include method is supported only for NHibernate queries");
            }

            if (query.Provider is IncludeQueryProvider includeQueryProvider)
            {
                includeQueryProvider = new IncludeQueryProvider(typeof(T), includeQueryProvider);
            }
            else if (query.Provider is DefaultQueryProvider defaultQueryProvider)
            {
                includeQueryProvider = new IncludeQueryProvider(typeof(T), defaultQueryProvider);
            }
            else
            {
                throw new InvalidOperationException($"Query provider {query.Provider} is not supported.");
            }

            includeQueryProvider.Include(path);
            return(includeQueryProvider);
        }