/// <summary> /// Build a 'contains' expression for a searching a property that /// contains the value of another string property /// </summary> public static Expression Build <T>(Expression <Func <T, string> > propertyToSearch, Expression <Func <T, string> > propertyToSearchFor) { var isNotNullExpression = ExpressionHelper.BuildNotNullExpression(propertyToSearch); var searchForIsNotNullExpression = ExpressionHelper.BuildNotNullExpression(propertyToSearchFor); var containsExpression = Expression.Call(propertyToSearch.Body, ExpressionMethods.StringContainsMethod, propertyToSearchFor.Body); var fullNotNullExpression = Expression.AndAlso(isNotNullExpression, searchForIsNotNullExpression); return(Expression.AndAlso(fullNotNullExpression, containsExpression)); }
/// <summary> /// Build an 'EndsWith' expression for a string property against a property /// </summary> private static Expression Build <T>(Expression <Func <T, string> > stringProperty, Expression <Func <T, string> > propertyToSearchFor, SearchOptions searchOptions) { var endsWithExpresion = Expression.Call(stringProperty.Body, ExpressionMethods.EndsWithMethodWithComparison, propertyToSearchFor.Body, searchOptions.ComparisonTypeExpression); Expression finalExpression = null; if (searchOptions.NullCheck) { var notNullProperty = ExpressionHelper.BuildNotNullExpression(stringProperty); var notNullSearchFor = ExpressionHelper.BuildNotNullExpression(propertyToSearchFor); finalExpression = ExpressionHelper.JoinAndAlsoExpression(notNullProperty, notNullSearchFor); } finalExpression = ExpressionHelper.JoinAndAlsoExpression(finalExpression, endsWithExpresion); return(Expression.IsTrue(finalExpression)); }