@@ -193,22 +193,37 @@ module ObjectListFilter =
193
193
let buildTypeDiscriminatorCheck ( param : SourceExpression ) ( t : Type ) =
194
194
match options.CompareDiscriminator, options.GetDiscriminatorValue with
195
195
| ValueNone, ValueNone ->
196
- // use __typename from filter and do type.ToSting() for values
197
- let typename = t.FullName
198
- Expression.Equal ( Expression.PropertyOrField ( param, " __typename" ), Expression.Constant ( typename)) :> Expression
196
+ Expression.Equal (
197
+ // Default discriminator property
198
+ Expression.PropertyOrField ( param, " __typename" ),
199
+ // Default discriminator value
200
+ Expression.Constant ( t.FullName)
201
+ ) :> Expression
199
202
| ValueSome discExpr, ValueNone ->
200
- // use discriminator and do type.ToSting() for values
201
- let typename = t.FullName
202
- Expression.Invoke ( discExpr, param, Expression.Constant ( typename)) :> Expression
203
+ Expression.Invoke (
204
+ // Provided discriminator comparison
205
+ discExpr,
206
+ param,
207
+ // Default discriminator value gathered from type
208
+ Expression.Constant( t.FullName)
209
+ ) :> Expression
203
210
| ValueNone, ValueSome discValueFn ->
204
- // use __typename from filter and execute discValueFn for values
205
211
let discriminatorValue = discValueFn t
206
- Expression.Equal ( Expression.PropertyOrField ( param, " __typename" ), Expression.Constant ( discriminatorValue)) :> Expression
212
+ Expression.Equal (
213
+ // Default discriminator property
214
+ Expression.PropertyOrField ( param, " __typename" ),
215
+ // Provided discriminator value gathered from type
216
+ Expression.Constant ( discriminatorValue)
217
+ ) :> Expression
207
218
| ValueSome discExpr, ValueSome discValueFn ->
208
- // use discriminator and execute discValueFn for values
209
219
let discriminatorValue = discValueFn t
210
- Expression.Invoke ( discExpr, param, Expression.Constant ( discriminatorValue))
211
-
220
+ Expression.Invoke (
221
+ // Provided discriminator comparison
222
+ discExpr,
223
+ param,
224
+ // Provided discriminator value gathered from type
225
+ Expression.Constant ( discriminatorValue)
226
+ )
212
227
let queryExpr =
213
228
let param = Expression.Parameter ( typeof< 'T>, " x" )
214
229
let body = buildFilterExpr ( SourceExpression param) buildTypeDiscriminatorCheck filter
0 commit comments