Skip to content

Commit ca45feb

Browse files
author
Alex Davies
committed
Fix issue with ODataFilter where "and" and "or" were using bitwise comparison not logical comparison.
1 parent 1568e62 commit ca45feb

File tree

1 file changed

+18
-21
lines changed

1 file changed

+18
-21
lines changed

src/StringToExpression/Languages/ODataFilterLanguage.cs

+18-21
Original file line numberDiff line numberDiff line change
@@ -144,45 +144,45 @@ protected virtual IEnumerable<GrammerDefinition> LogicalOperatorDefinitions()
144144
name:"EQ",
145145
regex: @"eq",
146146
orderOfPrecedence:11,
147-
expressionBuilder: (left,right) => Expression.Equal(left, right)),
147+
expressionBuilder: Expression.Equal),
148148
new BinaryOperatorDefinition(
149149
name:"NE",
150150
regex: @"ne",
151151
orderOfPrecedence:12,
152-
expressionBuilder: (left,right) => Expression.NotEqual(left, right)),
152+
expressionBuilder: Expression.NotEqual),
153153

154154
new BinaryOperatorDefinition(
155155
name:"GT",
156156
regex: @"gt",
157157
orderOfPrecedence:13,
158-
expressionBuilder: (left,right) => Expression.GreaterThan(left, right)),
158+
expressionBuilder: Expression.GreaterThan),
159159
new BinaryOperatorDefinition(
160160
name:"GE",
161161
regex: @"ge",
162162
orderOfPrecedence:14,
163-
expressionBuilder: (left,right) => Expression.GreaterThanOrEqual(left, right)),
163+
expressionBuilder: Expression.GreaterThanOrEqual),
164164

165165
new BinaryOperatorDefinition(
166166
name:"LT",
167167
regex: @"lt",
168168
orderOfPrecedence:15,
169-
expressionBuilder: (left,right) => Expression.LessThan(left, right)),
169+
expressionBuilder: Expression.LessThan),
170170
new BinaryOperatorDefinition(
171171
name:"LE",
172172
regex: @"le",
173173
orderOfPrecedence:16,
174-
expressionBuilder: (left,right) => Expression.LessThanOrEqual(left, right)),
174+
expressionBuilder: Expression.LessThanOrEqual),
175175

176176
new BinaryOperatorDefinition(
177177
name:"AND",
178178
regex: @"and",
179179
orderOfPrecedence:17,
180-
expressionBuilder: (left,right) => Expression.And(left, right)),
180+
expressionBuilder: Expression.AndAlso),
181181
new BinaryOperatorDefinition(
182182
name:"OR",
183183
regex: @"or",
184184
orderOfPrecedence:18,
185-
expressionBuilder: (left,right) => Expression.Or(left, right)),
185+
expressionBuilder: Expression.OrElse),
186186

187187
new UnaryOperatorDefinition(
188188
name:"NOT",
@@ -208,27 +208,27 @@ protected virtual IEnumerable<GrammerDefinition> ArithmeticOperatorDefinitions()
208208
name:"ADD",
209209
regex: @"add",
210210
orderOfPrecedence: 2,
211-
expressionBuilder: (left,right) => Expression.Add(left, right)),
211+
expressionBuilder: Expression.Add),
212212
new BinaryOperatorDefinition(
213213
name:"SUB",
214214
regex: @"sub",
215215
orderOfPrecedence: 2,
216-
expressionBuilder: (left,right) => Expression.Subtract(left, right)),
216+
expressionBuilder: Expression.Subtract),
217217
new BinaryOperatorDefinition(
218218
name:"MUL",
219219
regex: @"mul",
220220
orderOfPrecedence: 1,
221-
expressionBuilder: (left,right) => Expression.Multiply(left, right)),
221+
expressionBuilder: Expression.Multiply),
222222
new BinaryOperatorDefinition(
223223
name:"DIV",
224224
regex: @"div",
225225
orderOfPrecedence: 1,
226-
expressionBuilder: (left,right) => Expression.Divide(left, right)),
226+
expressionBuilder: Expression.Divide),
227227
new BinaryOperatorDefinition(
228228
name:"MOD",
229229
regex: @"mod",
230230
orderOfPrecedence: 1,
231-
expressionBuilder: (left,right) => Expression.Modulo(left, right)),
231+
expressionBuilder: Expression.Modulo),
232232
};
233233
}
234234

@@ -383,14 +383,11 @@ protected virtual IEnumerable<GrammerDefinition> PropertyDefinitions()
383383
name:"PROPERTY_PATH",
384384
regex: @"(?<![0-9])([A-Za-z_][A-Za-z0-9_]*/?)+",
385385
expressionBuilder: (value, parameters) => {
386-
return value.Split('/').Aggregate((Expression)parameters[0], (exp, prop)=>
387-
{
388-
return Expression.MakeMemberAccess(exp, exp.Type.GetProperty(prop,
389-
BindingFlags.Instance
390-
| BindingFlags.Public
391-
| BindingFlags.GetProperty
392-
| BindingFlags.IgnoreCase));
393-
});
386+
return value.Split('/').Aggregate((Expression)parameters[0], (exp, prop)=> Expression.MakeMemberAccess(exp, exp.Type.GetProperty(prop,
387+
BindingFlags.Instance
388+
| BindingFlags.Public
389+
| BindingFlags.GetProperty
390+
| BindingFlags.IgnoreCase)));
394391
}),
395392
};
396393
}

0 commit comments

Comments
 (0)