public static IQueryable <T> Wrap <T, M>(this IQueryable <M> queryable)
            where T : IEntity
            where M : IEntity, T
        {
            WrappedQueryableProvider <T, M> provider = new WrappedQueryableProvider <T, M>(queryable.Provider);

            return(provider.CreateQuery <T>(queryable.Expression));
        }
Beispiel #2
0
 public WrappedQueryable(WrappedQueryableProvider <T, M> provider, Expression expression)
 {
     if (expression == null)
     {
         throw new ArgumentNullException(nameof(expression));
     }
     if (provider == null)
     {
         throw new ArgumentNullException(nameof(provider));
     }
     Expression = expression;
     Provider   = provider;
 }
        public static IQueryable <M> Unwrap <T, M>(this IQueryable <T> queryable)
            where T : IEntity
            where M : IEntity, T
        {
            WrappedQueryable <T, M> wrapped = queryable as WrappedQueryable <T, M>;

            if (wrapped == null)
            {
                throw new NotSupportedException("不支持的类型。");
            }
            WrappedQueryableProvider <T, M> provider = wrapped.Provider;
            var visitor    = new ExpressionWrapper <T, M>();
            var expression = visitor.Visit(wrapped.Expression);

            return(provider.InnerQueryProvider.CreateQuery <M>(expression));
        }
Beispiel #4
0
 public WrappedOrderedQueryable(WrappedQueryableProvider <T, M> provider, Expression expression)
     : base(provider, expression)
 {
 }