/// <summary> /// Applies the single filter. /// </summary> /// <typeparam name="T">The type of the entity within the query.</typeparam> /// <param name="query">The query.</param> /// <param name="filter">The filter.</param> /// <param name="paramCount">The parameter count.</param> /// <param name="values">The values.</param> /// <returns>The filter clause.</returns> private static string ApplySingleFilter <T>(this IEnumerable <T> query, FilterModel filter, ref int paramCount, ref List <object> values) { string filterClause = string.Empty; if (filter.ChildFilters != null && filter.ChildFilters.Count() > 0) { filterClause = string.Format("({0})", query.ApplyFilters(filter.Logic, filter.ChildFilters, ref paramCount, ref values)); } else { string param = "@" + paramCount; bool iterateParam = true; if (filter.Field != null) { switch (filter.Operator) { case FilterOperator.Equals: filterClause = "{0} == " + param; break; case FilterOperator.DoesNotEqual: filterClause = "{0} != " + param; break; case FilterOperator.Contains: filterClause = "{0}.Contains(" + param + ")"; break; case FilterOperator.DoesNotContain: filterClause = "!{0}.Contains(" + param + ")"; break; case FilterOperator.StartsWith: filterClause = "{0}.StartsWith(" + param + ")"; break; case FilterOperator.EndsWith: filterClause = "{0}.EndsWith(" + param + ")"; break; case FilterOperator.IsBlank: filterClause = "({0} == null || {0} == '')"; iterateParam = false; break; case FilterOperator.IsNotBlank: filterClause = "({0} != null && {0} != '')"; iterateParam = false; break; case FilterOperator.LessThan: filterClause = "{0} < " + param; break; case FilterOperator.GreaterThan: filterClause = "{0} > " + param; break; case FilterOperator.LessThanOrEqualTo: filterClause = "{0} <= " + param; break; case FilterOperator.GreaterThanOrEqualTo: filterClause = "{0} >= " + param; break; } } if (string.IsNullOrWhiteSpace(filterClause)) { filterClause = "1 == 1"; iterateParam = false; } else { filterClause = string.Format("({0})", string.Format(filterClause, filter.Field)); } if (iterateParam) { paramCount++; values.Add(filter.GetTypedValue()); } } return(filterClause); }