Пример #1
0
        /// <summary>
        /// Create a dynamic where clause for a given property selector, comparison method and reference value.
        /// </summary>
        /// <typeparam name="T">The type of the query data.</typeparam>
        /// <param name="query">The query to filter.</param>
        /// <param name="selector">The property selector to parse.</param>
        /// <param name="comparer">The comparison method to use.</param>
        /// <param name="value">The reference value to compare with.</param>
        /// <param name="provider">The culture-specific formatting information.</param>
        /// <returns>The filtered query.</returns>
        public static IAsyncQueryable <T> Where <T>(this IAsyncQueryable <T> query, string selector, string comparer, string value, IFormatProvider provider = null)
        {
            if (query == null)
            {
                throw new ArgumentNullException(nameof(query));
            }
            if (string.IsNullOrEmpty(selector))
            {
                throw new ArgumentNullException(nameof(selector));
            }
            if (string.IsNullOrEmpty(comparer))
            {
                throw new ArgumentNullException(nameof(comparer));
            }

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

            var comparison = DynamicQuery.CreateComparison(target, selector, comparer, value, provider);

            return(query.Provider.CreateQuery <T>(CreateAsyncWhereClause(target, query.Expression, comparison)));
        }
Пример #2
0
        /// <summary>
        /// Create a dynamic where clause for a given property selector, comparison method and reference value.
        /// </summary>
        /// <param name="query">The query to filter.</param>
        /// <param name="selector">The property selector to parse.</param>
        /// <param name="comparer">The comparison method to use.</param>
        /// <param name="value">The reference value to compare with.</param>
        /// <param name="provider">The culture-specific formatting information.</param>
        /// <returns>The filtered query.</returns>
        public static IQueryable Where(this IQueryable query, string selector, DynamicCompare comparer, string value, IFormatProvider provider = null)
        {
            if (query == null)
            {
                throw new ArgumentNullException(nameof(query));
            }
            if (string.IsNullOrEmpty(selector))
            {
                throw new ArgumentNullException(nameof(selector));
            }
            if (!Enum.IsDefined(typeof(DynamicCompare), comparer))
            {
                throw new ArgumentOutOfRangeException(nameof(comparer));
            }

            var target = Expression.Parameter(query.ElementType);

            var comparison = DynamicQuery.CreateComparison(target, selector, comparer, value, provider);

            return(query.Provider.CreateQuery(CreateWhereClause(target, query.Expression, comparison)));
        }