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)); }