/// <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); }
/// <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); }
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); }