ObservableQueryProvider
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
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)]
[RequiresUnreferencedCode("This type uses Queryable.AsQueryable, which is not compatible with trimming because expressions referencing IQueryable extension methods can get rebound to IEnumerable extension methods, and those IEnumerable methods might be trimmed.")]
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(2)] 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(2)] TResult>(Expression expression)
{
throw new NotImplementedException();
}
object IQueryProvider.Execute(Expression expression)
{
throw new NotImplementedException();
}
}
}