Exemplo n.º 1
0
        /// <summary>
        /// Rewrite a given query.
        /// </summary>
        /// <typeparam name="T">The type of the query data.</typeparam>
        /// <param name="value">The query to rewrite.</param>
        /// <param name="rewriter">The rewriter to rewrite the query.</param>
        /// <returns>The rewritten query.</returns>
        public static IOrderedAsyncQueryable <T> Rewrite <T>(this IOrderedAsyncQueryable <T> value, ExpressionVisitor rewriter)
        {
            if (value == null)
            {
                throw new ArgumentNullException(nameof(value));
            }
            if (rewriter == null)
            {
                throw new ArgumentNullException(nameof(rewriter));
            }

            return(new RewriteAsyncQuery <T>(value, rewriter));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Rewrite a given query.
        /// </summary>
        /// <typeparam name="T">The type of the query data.</typeparam>
        /// <param name="value">The query to rewrite.</param>
        /// <param name="rewriter">The rewriter to rewrite the query.</param>
        /// <returns>The rewritten query.</returns>
        public static IOrderedAsyncQueryable <T> AsyncRewrite <T>(this IOrderedAsyncQueryable <T> value, ExpressionVisitor rewriter)
        {
            if (value == null)
            {
                throw new ArgumentNullException(nameof(value));
            }
            if (rewriter == null)
            {
                throw new ArgumentNullException(nameof(rewriter));
            }

            var provider = new RewriteAsyncQueryProvider(value.Provider, rewriter);

            return(new RewriteAsyncQueryable <T>(value, provider));
        }
Exemplo n.º 3
0
        /// <summary>
        /// Create a dynamic order by clause for a given property selector.
        /// </summary>
        /// <typeparam name="T">The type of the query data.</typeparam>
        /// <param name="query">The query to sort.</param>
        /// <param name="selector">The property selector to parse.</param>
        /// <param name="descending">True to sort descending, otherwise false.</param>
        /// <returns>The sorted query.</returns>
        public static IOrderedAsyncQueryable <T> ThenBy <T>(this IOrderedAsyncQueryable <T> query, string selector, bool descending = false)
        {
            if (query == null)
            {
                throw new ArgumentNullException(nameof(query));
            }
            if (string.IsNullOrEmpty(selector))
            {
                throw new ArgumentNullException(nameof(selector));
            }

            var target = Expression.Parameter(typeof(T));

            return((IOrderedAsyncQueryable <T>)query.Provider.CreateQuery <T>(CreateAsyncOrderClause(target, query.Expression, selector, false, descending)));
        }
Exemplo n.º 4
0
        /// <summary>
        /// Rewrite a given query.
        /// </summary>
        /// <param name="value">The query to rewrite.</param>
        /// <param name="rewriter">The rewriter to rewrite the query.</param>
        /// <returns>The rewritten query.</returns>
        public static IOrderedAsyncQueryable Rewrite(this IOrderedAsyncQueryable value, ExpressionVisitor rewriter)
        {
            if (value == null)
            {
                throw new ArgumentNullException(nameof(value));
            }
            if (rewriter == null)
            {
                throw new ArgumentNullException(nameof(rewriter));
            }

            return((IOrderedAsyncQueryable)Activator.CreateInstance(
                       typeof(RewriteAsyncQuery <>).MakeGenericType(value.ElementType),
                       value, rewriter));
        }
Exemplo n.º 5
0
        /// <summary>
        /// Rewrite a given query.
        /// </summary>
        /// <param name="value">The query to rewrite.</param>
        /// <param name="rewriter">The rewriter to rewrite the query.</param>
        /// <returns>The rewritten query.</returns>
        public static IOrderedAsyncQueryable AsyncRewrite(this IOrderedAsyncQueryable value, ExpressionVisitor rewriter)
        {
            if (value is null)
            {
                throw new ArgumentNullException(nameof(value));
            }
            if (rewriter is null)
            {
                throw new ArgumentNullException(nameof(rewriter));
            }

            var provider = new RewriteAsyncQueryProvider(value.Provider, rewriter);

            return((IOrderedAsyncQueryable)Activator.CreateInstance(
                       typeof(RewriteAsyncQueryable <>).MakeGenericType(value.ElementType),
                       value, provider) !);
        }
Exemplo n.º 6
0
 /// <summary>
 /// Replaces methods of type <c>from</c> with methods of type <c>to</c>.
 /// </summary>
 /// <typeparam name="T">The type of the query data.</typeparam>
 /// <param name="value">A query.</param>
 /// <param name="from">A type to replace.</param>
 /// <param name="to">A type to use instead.</param>
 /// <returns>A query proxy.</returns>
 public static IOrderedAsyncQueryable <T> ToSubstitution <T>(this IOrderedAsyncQueryable <T> value, Type from, Type to)
 {
     return(value.Rewrite(new SubstitutionQueryRewriter(from, to)));
 }
 /// <summary>
 /// Replaces method calls with lambda expressions.
 /// </summary>
 /// <typeparam name="T">The type of the query data.</typeparam>
 /// <param name="value">A query.</param>
 /// <param name="whitelist">A list of types to inject, whether marked as injectable or not.</param>
 /// <returns>A query proxy.</returns>
 public static IOrderedAsyncQueryable <T> ToInjectable <T>(this IOrderedAsyncQueryable <T> value, params Type[] whitelist)
 {
     return(value.Rewrite(new InjectableQueryRewriter(whitelist)));
 }
 /// <summary>
 /// Makes a query null-safe.
 /// </summary>
 /// <typeparam name="T">The type of the query data.</typeparam>
 /// <param name="value">A query.</param>
 /// <returns>A query proxy.</returns>
 public static IOrderedAsyncQueryable <T> ToAsyncNullsafe <T>(this IOrderedAsyncQueryable <T> value)
 {
     return(value.AsyncRewrite(new NullsafeQueryRewriter()));
 }
 /// <summary>
 /// Replaces method calls with lambda expressions.
 /// </summary>
 /// <param name="value">A query.</param>
 /// <param name="whitelist">A list of types to inject, whether marked as injectable or not.</param>
 /// <returns>A query proxy.</returns>
 public static IOrderedAsyncQueryable ToAsyncInjectable(this IOrderedAsyncQueryable value, params Type[] whitelist)
 {
     return(value.AsyncRewrite(new InjectableQueryRewriter(whitelist)));
 }
Exemplo n.º 10
0
 /// <summary>
 /// Makes a query null-safe.
 /// </summary>
 /// <param name="value">A query.</param>
 /// <returns>A query proxy.</returns>
 public static IOrderedAsyncQueryable ToNullsafe(this IOrderedAsyncQueryable value)
 {
     return(value.Rewrite(new NullsafeQueryRewriter()));
 }
Exemplo n.º 11
0
 /// <summary>
 /// Replaces methods of type <c>from</c> with methods of type <c>to</c>.
 /// </summary>
 /// <param name="value">A query.</param>
 /// <param name="from">A type to replace.</param>
 /// <param name="to">A type to use instead.</param>
 /// <returns>A query proxy.</returns>
 public static IOrderedAsyncQueryable ToAsyncSubstitution(this IOrderedAsyncQueryable value, Type from, Type to)
 {
     return(value.AsyncRewrite(new SubstitutionQueryRewriter(from, to)));
 }
 /// <summary>
 /// Replaces methods of type <c>from</c> with methods of type <c>to</c>.
 /// </summary>
 /// <typeparam name="T">The type of the query data.</typeparam>
 /// <param name="value">A query.</param>
 /// <param name="from">A type to replace.</param>
 /// <param name="to">A type to use instead.</param>
 /// <returns>A query proxy.</returns>
 public static IOrderedAsyncQueryable <T> ToAsyncSubstitution <T>(this IOrderedAsyncQueryable <T> value, Type from, Type to)
 => value.AsyncRewrite(new SubstitutionQueryRewriter(from, to));
Exemplo n.º 13
0
 /// <summary>
 /// Makes a query null-safe.
 /// </summary>
 /// <param name="value">A query.</param>
 /// <returns>A query proxy.</returns>
 public static IOrderedAsyncQueryable ToAsyncNullsafe(this IOrderedAsyncQueryable value)
 => value.AsyncRewrite(new NullsafeQueryRewriter());
Exemplo n.º 14
0
 /// <summary>
 /// Replaces method calls with lambda expressions.
 /// </summary>
 /// <typeparam name="T">The type of the query data.</typeparam>
 /// <param name="value">A query.</param>
 /// <param name="greenlist">A list of types to inject, whether marked as injectable or not.</param>
 /// <returns>A query proxy.</returns>
 public static IOrderedAsyncQueryable <T> ToAsyncInjectable <T>(this IOrderedAsyncQueryable <T> value, params Type[] greenlist)
 => value.AsyncRewrite(new InjectableQueryRewriter(greenlist));
Exemplo n.º 15
0
 public static IOrderedAsyncQueryable <TSource> ThenByDescending <TSource, TKey>(this IOrderedAsyncQueryable <TSource> source, Expression <Func <TSource, TKey> > keySelector)
 {
     return((IOrderedAsyncQueryable <TSource>)Queryable.ThenByDescending(source, keySelector));
 }