/// <summary>
        /// Retrieve items where any of the defined properties
        /// are equal to any of the defined search terms
        /// </summary>
        /// <param name="terms">Term or terms to search for</param>
        public QueryableStringSearch <T> EqualTo(params string[] terms)
        {
            Expression completeExpression = QueryableEqualsExpressionBuilder.Build(Properties, terms);

            BuildExpression(completeExpression);
            return(this);
        }
        public QueryableStringSearch <T> IsEqual(params string[] terms)
        {
            Expression completeExpression = null;

            foreach (var propertyToSearch in Properties)
            {
                var isEqualExpression = QueryableEqualsExpressionBuilder.Build(propertyToSearch, terms);
                completeExpression = ExpressionHelper.JoinOrExpression(completeExpression, isEqualExpression);
            }
            BuildExpression(completeExpression);
            return(this);
        }
        public QueryableStringSearch <T> IsEqual(params Expression <Func <T, string> >[] propertiesToSearchFor)
        {
            Expression completeExpression = null;

            foreach (var propertyToSearch in Properties)
            {
                var alignedProperties = propertiesToSearchFor.Select(AlignParameter).ToArray();
                var isEqualExpression = QueryableEqualsExpressionBuilder.Build(propertyToSearch, alignedProperties);
                completeExpression = ExpressionHelper.JoinOrExpression(completeExpression, isEqualExpression);
            }

            BuildExpression(completeExpression);
            return(this);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Build an 'EndsWith' expression for a string property against multiple properties
        /// </summary>
        private static Expression Build <T>(Expression <Func <T, string> > stringProperty, Expression <Func <T, string> > propertyToSearchFor, SearchType searchType)
        {
            var paddedTerm = propertyToSearchFor.Body;

            if (searchType == SearchType.WholeWords)
            {
                var seperator = Expression.Constant(" ");
                paddedTerm = Expression.Call(ExpressionMethods.StringConcatMethod, seperator, propertyToSearchFor.Body);
            }

            var result = Expression.Call(stringProperty.Body, ExpressionMethods.EndsWithMethod, paddedTerm);

            if (searchType == SearchType.WholeWords)
            {
                var isEqualExpression = QueryableEqualsExpressionBuilder.Build(stringProperty, propertyToSearchFor);
                return(ExpressionHelper.JoinOrExpression(result, isEqualExpression));
            }
            return(result);
        }
Exemplo n.º 5
0
        public static Expression Build <T>(Expression <Func <T, string> >[] propertiesToSearch, ICollection <string> searchTerms, SearchType searchType)
        {
            Expression result = null;

            foreach (var propertyToSearch in propertiesToSearch)
            {
                var containsExpression = Build(propertyToSearch, searchTerms, searchType);
                result = ExpressionHelper.JoinOrExpression(result, containsExpression);
            }

            if (searchType == SearchType.WholeWords)
            {
                var terms = searchTerms.ToArray();
                var startsWithExpression = QueryableStartsWithExpressionBuilder.Build(propertiesToSearch, terms, searchType);
                result = ExpressionHelper.JoinOrExpression(result, startsWithExpression);
                var endsWithExpression = QueryableEndsWithExpressionBuilder.Build(propertiesToSearch, terms, searchType);
                result = ExpressionHelper.JoinOrExpression(result, endsWithExpression);

                var equalsExpression = QueryableEqualsExpressionBuilder.Build(propertiesToSearch, terms);
                result = ExpressionHelper.JoinOrExpression(result, equalsExpression);
            }

            return(result);
        }