Exemplo n.º 1
0
        /// <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);
        }