public static IQueryable <T> Wrap <T, M>(this IQueryable <M> queryable, WrapperContext context = null) where M : T { if (queryable == null) { throw new ArgumentNullException(nameof(queryable)); } if (context == null) { context = new WrapperContext(); } WrappedQueryableProvider <T, M> provider = new WrappedQueryableProvider <T, M>(queryable.Provider, context); return(provider.CreateQuery <T>(queryable.Expression)); }
public static IQueryable <M> Unwrap <T, M>(this IQueryable <T> queryable, WrapperContext context = null) where M : T { if (queryable == null) { throw new ArgumentNullException(nameof(queryable)); } WrappedQueryable <T, M> wrapped = queryable as WrappedQueryable <T, M>; if (wrapped == null) { throw new NotSupportedException("不支持的类型。"); } WrappedQueryableProvider <T, M> provider = wrapped.Provider; var visitor = new WrapperVisitor(context ?? provider.Context); var expression = visitor.Visit(wrapped.Expression); return(provider.InnerQueryProvider.CreateQuery <M>(expression)); }
public WrappedOrderedQueryable(WrappedQueryableProvider <T, M> provider, Expression expression) : base(provider, expression) { }
public WrappedQueryable(WrappedQueryableProvider <T, M> provider, Expression expression) { Expression = expression ?? throw new ArgumentNullException(nameof(expression)); Provider = provider ?? throw new ArgumentNullException(nameof(provider)); }