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