示例#1
0
        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));
        }
示例#2
0
        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));
 }