@@ -40,7 +40,7 @@ static Expression MakePredicateBody(IReadOnlyCollection<WhereExpression> wheres)
4040 else
4141 {
4242 // Get the predicate body for the single expression
43- nextExpression = MakePredicateBody ( where . Path , where . Comparison , where . Value , where . Negate , where . Case ) ;
43+ nextExpression = MakePredicateBody ( where . Path , where . Comparison , where . Value , where . Negate ) ;
4444 }
4545
4646 // If this is the first where processed
@@ -65,29 +65,29 @@ static Expression MakePredicateBody(IReadOnlyCollection<WhereExpression> wheres)
6565 /// <summary>
6666 /// Create a single predicate for the single set of supplied conditional arguments
6767 /// </summary>
68- public static Expression < Func < T , bool > > BuildPredicate ( string path , Comparison comparison , string ? [ ] ? values , bool negate = false , StringComparison ? stringComparison = null )
68+ public static Expression < Func < T , bool > > BuildPredicate ( string path , Comparison comparison , string ? [ ] ? values , bool negate = false )
6969 {
70- var expressionBody = MakePredicateBody ( path , comparison , values , negate , stringComparison ) ;
70+ var expressionBody = MakePredicateBody ( path , comparison , values , negate ) ;
7171 var param = PropertyCache < T > . SourceParameter ;
7272
7373 return Expression . Lambda < Func < T , bool > > ( expressionBody , param ) ;
7474 }
7575
76- static Expression MakePredicateBody ( string path , Comparison comparison , string ? [ ] ? values , bool negate , StringComparison ? stringComparison )
76+ static Expression MakePredicateBody ( string path , Comparison comparison , string ? [ ] ? values , bool negate )
7777 {
7878 Expression expressionBody ;
7979
8080 // If path includes list property access
8181 if ( HasListPropertyInPath ( path ) )
8282 {
8383 // Handle a list path
84- expressionBody = ProcessList ( path , comparison , values ! , stringComparison ) ;
84+ expressionBody = ProcessList ( path , comparison , values ! ) ;
8585 }
8686 // Otherwise linear property access
8787 else
8888 {
8989 // Just get expression
90- expressionBody = GetExpression ( path , comparison , values , stringComparison ) ;
90+ expressionBody = GetExpression ( path , comparison , values ) ;
9191 }
9292
9393 // If the expression should be negated
@@ -99,7 +99,7 @@ static Expression MakePredicateBody(string path, Comparison comparison, string?[
9999 return expressionBody ;
100100 }
101101
102- static Expression ProcessList ( string path , Comparison comparison , string ? [ ] ? values , StringComparison ? stringComparison )
102+ static Expression ProcessList ( string path , Comparison comparison , string ? [ ] ? values )
103103 {
104104 // Get the path pertaining to individual list items
105105 var listPath = ListPropertyRegex ( ) . Match ( path ) . Groups [ 1 ] . Value ;
@@ -118,7 +118,7 @@ static Expression ProcessList(string path, Comparison comparison, string?[]? val
118118 var buildPredicate = genericType
119119 . GetMethods ( BindingFlags . Public | BindingFlags . Static )
120120 . SingleOrDefault ( _ => _ . Name == "BuildPredicate" &&
121- _ . GetParameters ( ) . Length == 5 ) ;
121+ _ . GetParameters ( ) . Length == 4 ) ;
122122 if ( buildPredicate == null )
123123 {
124124 throw new ( $ "Could not find BuildPredicate method on { genericType . FullName } ") ;
@@ -131,8 +131,7 @@ static Expression ProcessList(string path, Comparison comparison, string?[]? val
131131 listPath ,
132132 comparison ,
133133 values ! ,
134- false ,
135- stringComparison !
134+ false
136135 ] ) ! ;
137136
138137 // Generate a method info for the Any Enumerable Static Method
@@ -146,7 +145,7 @@ static Expression ProcessList(string path, Comparison comparison, string?[]? val
146145 return Expression . Call ( anyInfo , property . Left , subPredicate ) ;
147146 }
148147
149- static Expression GetExpression ( string path , Comparison comparison , string ? [ ] ? values , StringComparison ? stringComparison )
148+ static Expression GetExpression ( string path , Comparison comparison , string ? [ ] ? values )
150149 {
151150 var property = PropertyCache < T > . GetProperty ( path ) ;
152151 Expression expressionBody ;
@@ -156,18 +155,18 @@ static Expression GetExpression(string path, Comparison comparison, string?[]? v
156155 switch ( comparison )
157156 {
158157 case Comparison . NotIn :
159- WhereValidator . ValidateString ( comparison , stringComparison ) ;
160- expressionBody = NegateExpression ( MakeStringListInComparison ( values ! , property , stringComparison ) ) ; // Ensure expression is negated
158+ WhereValidator . ValidateString ( comparison ) ;
159+ expressionBody = NegateExpression ( MakeStringListInComparison ( values ! , property ) ) ; // Ensure expression is negated
161160 break ;
162161 case Comparison . In :
163- WhereValidator . ValidateString ( comparison , stringComparison ) ;
164- expressionBody = MakeStringListInComparison ( values ! , property , stringComparison ) ;
162+ WhereValidator . ValidateString ( comparison ) ;
163+ expressionBody = MakeStringListInComparison ( values ! , property ) ;
165164 break ;
166165
167166 default :
168- WhereValidator . ValidateSingleString ( comparison , stringComparison ) ;
167+ WhereValidator . ValidateSingleString ( comparison ) ;
169168 var value = values ? . Single ( ) ;
170- expressionBody = MakeSingleStringComparison ( comparison , value , property , stringComparison ) ;
169+ expressionBody = MakeSingleStringComparison ( comparison , value , property ) ;
171170 break ;
172171 }
173172 }
@@ -176,16 +175,16 @@ static Expression GetExpression(string path, Comparison comparison, string?[]? v
176175 switch ( comparison )
177176 {
178177 case Comparison . NotIn :
179- WhereValidator . ValidateObject ( property . PropertyType , comparison , stringComparison ) ;
178+ WhereValidator . ValidateObject ( property . PropertyType , comparison ) ;
180179 expressionBody = NegateExpression ( MakeObjectListInComparision ( values ! , property ) ) ;
181180 break ;
182181 case Comparison . In :
183- WhereValidator . ValidateObject ( property . PropertyType , comparison , stringComparison ) ;
182+ WhereValidator . ValidateObject ( property . PropertyType , comparison ) ;
184183 expressionBody = MakeObjectListInComparision ( values ! , property ) ;
185184 break ;
186185
187186 default :
188- WhereValidator . ValidateSingleObject ( property . PropertyType , comparison , null ) ;
187+ WhereValidator . ValidateSingleObject ( property . PropertyType , comparison ) ;
189188 var value = values ? . Single ( ) ;
190189 var valueObject = TypeConverter . ConvertStringToType ( value , property . PropertyType ) ;
191190 expressionBody = MakeSingleObjectComparison ( comparison , valueObject , property ) ;
@@ -211,20 +210,9 @@ static Expression MakeObjectListInComparision(string[] values, Property<T> prope
211210 return Expression . Call ( constant , property . ListContains , property . Left ) ;
212211 }
213212
214- static Expression MakeStringListInComparison ( string [ ] values , Property < T > property , StringComparison ? comparison )
213+ static Expression MakeStringListInComparison ( string [ ] values , Property < T > property )
215214 {
216- MethodCallExpression equalsBody ;
217-
218- if ( comparison is null )
219- {
220- // Do basic string compare
221- equalsBody = Expression . Call ( null , ReflectionCache . StringEqual , ExpressionCache . StringParam , property . Left ) ;
222- }
223- else
224- {
225- // String comparison with comparison type value
226- equalsBody = Expression . Call ( null , ReflectionCache . StringEqualComparison , ExpressionCache . StringParam , property . Left , Expression . Constant ( comparison ) ) ;
227- }
215+ var equalsBody = Expression . Call ( null , ReflectionCache . StringEqual , ExpressionCache . StringParam , property . Left ) ;
228216
229217 // Make lambda for comparing each string value against property value
230218 var itemEvaluate = Expression . Lambda < Func < string , bool > > ( equalsBody , ExpressionCache . StringParam ) ;
@@ -233,55 +221,31 @@ static Expression MakeStringListInComparison(string[] values, Property<T> proper
233221 return Expression . Call ( null , ReflectionCache . StringAny , Expression . Constant ( values ) , itemEvaluate ) ;
234222 }
235223
236- static Expression MakeSingleStringComparison ( Comparison comparison , string ? value , Property < T > property , StringComparison ? stringComparison )
224+ static Expression MakeSingleStringComparison ( Comparison comparison , string ? value , Property < T > property )
237225 {
238226 var left = property . Left ;
239227
240228 var valueConstant = Expression . Constant ( value , typeof ( string ) ) ;
241229 var nullCheck = Expression . NotEqual ( left , ExpressionCache . Null ) ;
242230
243- if ( stringComparison is null )
231+ switch ( comparison )
244232 {
245- switch ( comparison )
246- {
247- case Comparison . Equal :
248- return Expression . Call ( ReflectionCache . StringEqual , left , valueConstant ) ;
249- case Comparison . NotEqual :
250- return Expression . Not ( Expression . Call ( ReflectionCache . StringEqual , left , valueConstant ) ) ;
251- case Comparison . Like :
252- return Expression . Call ( null , ReflectionCache . StringLike , ExpressionCache . EfFunction , left , valueConstant ) ;
253- case Comparison . StartsWith :
254- var startsWithExpression = Expression . Call ( left , ReflectionCache . StringStartsWith , valueConstant ) ;
255- return Expression . AndAlso ( nullCheck , startsWithExpression ) ;
256- case Comparison . EndsWith :
257- var endsWithExpression = Expression . Call ( left , ReflectionCache . StringEndsWith , valueConstant ) ;
258- return Expression . AndAlso ( nullCheck , endsWithExpression ) ;
259- case Comparison . Contains :
260- var indexOfExpression = Expression . Call ( left , ReflectionCache . StringIndexOf , valueConstant ) ;
261- var notEqualExpression = Expression . NotEqual ( indexOfExpression , ExpressionCache . NegativeOne ) ;
262- return Expression . AndAlso ( nullCheck , notEqualExpression ) ;
263- }
264- }
265- else
266- {
267- var comparisonConstant = Expression . Constant ( stringComparison , typeof ( StringComparison ) ) ;
268- switch ( comparison )
269- {
270- case Comparison . Equal :
271- return Expression . Call ( ReflectionCache . StringEqualComparison , left , valueConstant , comparisonConstant ) ;
272- case Comparison . NotEqual :
273- return Expression . Not ( Expression . Call ( ReflectionCache . StringEqualComparison , left , valueConstant , comparisonConstant ) ) ;
274- case Comparison . StartsWith :
275- var startsWithExpression = Expression . Call ( left , ReflectionCache . StringStartsWithComparison , valueConstant , comparisonConstant ) ;
276- return Expression . AndAlso ( nullCheck , startsWithExpression ) ;
277- case Comparison . EndsWith :
278- var endsWithExpression = Expression . Call ( left , ReflectionCache . StringEndsWithComparison , valueConstant , comparisonConstant ) ;
279- return Expression . AndAlso ( nullCheck , endsWithExpression ) ;
280- case Comparison . Contains :
281- var indexOfExpression = Expression . Call ( left , ReflectionCache . StringIndexOfComparison , valueConstant , comparisonConstant ) ;
282- var notEqualExpression = Expression . NotEqual ( indexOfExpression , ExpressionCache . NegativeOne ) ;
283- return Expression . AndAlso ( nullCheck , notEqualExpression ) ;
284- }
233+ case Comparison . Equal :
234+ return Expression . Call ( ReflectionCache . StringEqual , left , valueConstant ) ;
235+ case Comparison . NotEqual :
236+ return Expression . Not ( Expression . Call ( ReflectionCache . StringEqual , left , valueConstant ) ) ;
237+ case Comparison . Like :
238+ return Expression . Call ( null , ReflectionCache . StringLike , ExpressionCache . EfFunction , left , valueConstant ) ;
239+ case Comparison . StartsWith :
240+ var startsWithExpression = Expression . Call ( left , ReflectionCache . StringStartsWith , valueConstant ) ;
241+ return Expression . AndAlso ( nullCheck , startsWithExpression ) ;
242+ case Comparison . EndsWith :
243+ var endsWithExpression = Expression . Call ( left , ReflectionCache . StringEndsWith , valueConstant ) ;
244+ return Expression . AndAlso ( nullCheck , endsWithExpression ) ;
245+ case Comparison . Contains :
246+ var indexOfExpression = Expression . Call ( left , ReflectionCache . StringIndexOf , valueConstant ) ;
247+ var notEqualExpression = Expression . NotEqual ( indexOfExpression , ExpressionCache . NegativeOne ) ;
248+ return Expression . AndAlso ( nullCheck , notEqualExpression ) ;
285249 }
286250
287251 throw new ( $ "Invalid comparison operator '{ comparison } '.") ;
0 commit comments