ObservableQueryProvider
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reactive.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
namespace System.Reactive
{
    [System.Runtime.CompilerServices.NullableContext(1)]
    [System.Runtime.CompilerServices.Nullable(0)]
    internal class ObservableQueryProvider : IQbservableProvider, IQueryProvider
    {
        [System.Runtime.CompilerServices.Nullable(2)]
        private static MethodInfo _staticAsQueryable;
        private static MethodInfo AsQueryable => _staticAsQueryable ?? (_staticAsQueryable = Qbservable.InfoOf((Expression<Func<object>>)(() => ((IEnumerable<object>)null).AsQueryable())).GetGenericMethodDefinition());
        public IQbservable<TResult> CreateQuery<[System.Runtime.CompilerServices.Nullable(2)] TResult>(Expression expression)
        {
            if (expression == null)
                throw new ArgumentNullException("expression");
            if (!typeof(IObservable<TResult>).IsAssignableFrom(expression.Type))
                throw new ArgumentException(Strings_Providers.INVALID_TREE_TYPE, "expression");
            return new ObservableQuery<TResult>(expression);
        }
        IQueryable<TElement> IQueryProvider.CreateQuery<[System.Runtime.CompilerServices.Nullable(0)] TElement>(Expression expression)
        {
            MethodCallExpression methodCallExpression = expression as MethodCallExpression;
            if (methodCallExpression == null || methodCallExpression.Method.DeclaringType != typeof(Qbservable) || methodCallExpression.Method.Name != "ToQueryable")
                throw new ArgumentException(Strings_Providers.EXPECTED_TOQUERYABLE_METHODCALL, "expression");
            Expression arg = methodCallExpression.Arguments[0];
            return Expression.Lambda<Func<IQueryable<TElement>>>(Expression.Call(AsQueryable.MakeGenericMethod(typeof(TElement)), Expression.Call(typeof(Observable).GetMethod("ToEnumerable").MakeGenericMethod(typeof(TElement)), arg)), Array.Empty<ParameterExpression>()).Compile()();
        }
        IQueryable IQueryProvider.CreateQuery(Expression expression)
        {
            throw new NotImplementedException();
        }
        TResult IQueryProvider.Execute<[System.Runtime.CompilerServices.Nullable(0)] TResult>(Expression expression)
        {
            throw new NotImplementedException();
        }
        object IQueryProvider.Execute(Expression expression)
        {
            throw new NotImplementedException();
        }
    }
}