Beispiel #1
0
        protected override Expression BuildExpression(MemberExpression property)
        {
            Expression searchExpression  = null;
            Expression searchExpression1 = null;
            Expression searchExpression2 = null;

            if (string.IsNullOrEmpty(this.SearchTerm))
            {
                return(null);
            }
            if (this.Comparator == TextComparators.In)
            {
                Expression combinedExpression = null;
                foreach (string val in SearchTerm.Split(','))
                {
                    searchExpression1 = Expression.Equal(property, Expression.Constant(val));
                    if (!ReferenceEquals(searchExpression1, null) && !ReferenceEquals(searchExpression2, null))
                    {
                        combinedExpression = Expression.OrElse(searchExpression2, searchExpression1);
                        searchExpression1  = combinedExpression;
                    }
                    searchExpression2 = searchExpression1;
                }
                return(combinedExpression);
            }
            else
            {
                searchExpression = Expression.Call(
                    property,
                    typeof(string).GetMethod(this.Comparator.ToString(), new[] { typeof(string) }),
                    Expression.Constant(this.SearchTerm));
            }
            return(searchExpression);
        }
Beispiel #2
0
        protected override System.Linq.Expressions.Expression BuildExpression(System.Linq.Expressions.MemberExpression property)
        {
            if (string.IsNullOrEmpty(this.SearchTerm))
            {
                return(null);
            }
            object enumValue = null;

            Expression searchExpression  = null;
            Expression searchExpression1 = null;
            Expression searchExpression2 = null;

            if (this.Comparator == EnumComparators.In)
            {
                Expression combinedExpression = null;
                foreach (string val in SearchTerm.Split(','))
                {
                    if (!ReferenceEquals(this.EnumType, null))
                    {
                        enumValue = Enum.Parse(this.EnumType, val);
                    }
                    else
                    {
                        enumValue = Enum.Parse(property.Type, val);
                    }
                    searchExpression1 = Expression.Equal(property, Expression.Constant(enumValue));
                    if (!ReferenceEquals(searchExpression1, null) && !ReferenceEquals(searchExpression2, null))
                    {
                        combinedExpression = Expression.OrElse(searchExpression2, searchExpression1);
                        searchExpression1  = combinedExpression;
                    }
                    searchExpression2 = searchExpression1;
                }
                if (ReferenceEquals(combinedExpression, null))
                {
                    combinedExpression = searchExpression2;
                }

                return(combinedExpression);
            }
            else
            {
                if (!ReferenceEquals(this.EnumType, null))
                {
                    enumValue = Enum.Parse(this.EnumType, this.SearchTerm);
                }
                else
                {
                    enumValue = Enum.Parse(property.Type, this.SearchTerm);
                }

                searchExpression = Expression.Equal(property, Expression.Constant(enumValue));
            }



            return(searchExpression);
        }