/// <summary>
        /// Retrieve items where any of the defined terms are contained
        /// within any of the defined properties
        /// </summary>
        /// <param name="terms">Term or terms to search for</param>
        public QueryableStringSearch <T> Containing(params string[] terms)
        {
            Ensure.ArgumentNotNull(terms, "terms");
            var validSearchTerms = StoreSearchTerms(terms);

            var orExpression = QueryableContainsExpressionBuilder.Build(Properties, validSearchTerms, _searchType);

            BuildExpression(orExpression);
            return(this);
        }
        /// <summary>
        /// Retrieve items where any of the defined terms are contained
        /// within any of the defined properties
        /// </summary>
        /// <param name="terms">Term or terms to search for</param>
        public QueryableStringSearch <T> Containing(params string[] terms)
        {
            Ensure.ArgumentNotNull(terms, "terms");
            var validSearchTerms = terms.Where(s => !String.IsNullOrWhiteSpace(s)).ToArray();

            _containingSearchTerms = _containingSearchTerms.Union(validSearchTerms).ToList();

            var orExpression = QueryableContainsExpressionBuilder.Build(this.Properties, validSearchTerms, _searchType);

            this.BuildExpression(orExpression);
            return(this);
        }
        /// <summary>
        /// Retrieve items where any of the defined terms are contained
        /// within any of the defined properties
        /// </summary>
        /// <param name="terms">Term or terms to search for</param>
        public QueryableStringSearch <T> Containing(params Expression <Func <T, string> >[] terms)
        {
            Expression finalExpression = null;

            foreach (var propertyToSearch in Properties)
            {
                var        searchTermProperty   = AlignParameter(terms[0]);
                Expression comparisonExpression = QueryableContainsExpressionBuilder.Build(propertyToSearch, searchTermProperty);
                finalExpression = ExpressionHelper.JoinOrExpression(finalExpression, comparisonExpression);
            }
            BuildExpression(finalExpression);
            return(this);
        }
 /// <summary>
 /// Retrieves items where any of the defined properties
 /// contain any of the supplied <paramref name="values">values</paramref>
 /// </summary>
 /// <param name="values">A collection of values to match upon</param>
 public QueryableChildStringSearch <TParent, TChild> Containing(params string[] values)
 {
     AppendExpression(QueryableContainsExpressionBuilder.Build(Properties, values, _searchOptions.SearchType));
     return(this);
 }