27
27
using MongoDB . Bson . Serialization . Options ;
28
28
using MongoDB . Driver . Builders ;
29
29
using MongoDB . Driver . Linq . Utils ;
30
+ using MongoDB . Bson . Serialization . Conventions ;
30
31
31
32
namespace MongoDB . Driver . Linq
32
33
{
@@ -1291,14 +1292,7 @@ private IMongoQuery BuildTypeComparisonQuery(Expression variableExpression, Expr
1291
1292
return null ;
1292
1293
}
1293
1294
1294
- // TODO: would the object ever not be a ParameterExpression?
1295
- var parameterExpression = methodCallExpression . Object as ParameterExpression ;
1296
- if ( parameterExpression == null )
1297
- {
1298
- return null ;
1299
- }
1300
-
1301
- var serializationInfo = _serializationInfoHelper . GetSerializationInfo ( parameterExpression ) ;
1295
+ var serializationInfo = _serializationInfoHelper . GetSerializationInfo ( methodCallExpression . Object ) ;
1302
1296
var nominalType = serializationInfo . NominalType ;
1303
1297
1304
1298
var discriminatorConvention = BsonSerializer . LookupDiscriminatorConvention ( nominalType ) ;
@@ -1308,22 +1302,28 @@ private IMongoQuery BuildTypeComparisonQuery(Expression variableExpression, Expr
1308
1302
return BuildBooleanQuery ( true ) ;
1309
1303
}
1310
1304
1305
+ var elementName = discriminatorConvention . ElementName ;
1306
+ if ( serializationInfo . ElementName != null )
1307
+ {
1308
+ elementName = string . Format ( "{0}.{1}" , serializationInfo . ElementName , elementName ) ;
1309
+ }
1310
+
1311
1311
if ( discriminator . IsBsonArray )
1312
1312
{
1313
1313
var discriminatorArray = discriminator . AsBsonArray ;
1314
1314
var queries = new IMongoQuery [ discriminatorArray . Count + 1 ] ;
1315
- queries [ 0 ] = Query . Size ( discriminatorConvention . ElementName , discriminatorArray . Count ) ;
1315
+ queries [ 0 ] = Query . Size ( elementName , discriminatorArray . Count ) ;
1316
1316
for ( var i = 0 ; i < discriminatorArray . Count ; i ++ )
1317
1317
{
1318
- queries [ i + 1 ] = Query . EQ ( string . Format ( "{0}.{1}" , discriminatorConvention . ElementName , i ) , discriminatorArray [ i ] ) ;
1318
+ queries [ i + 1 ] = Query . EQ ( string . Format ( "{0}.{1}" , elementName , i ) , discriminatorArray [ i ] ) ;
1319
1319
}
1320
1320
return Query . And ( queries ) ;
1321
1321
}
1322
1322
else
1323
1323
{
1324
1324
return Query . And (
1325
- Query . NotExists ( discriminatorConvention . ElementName + ".0" ) , // trick to check that element is not an array
1326
- Query . EQ ( discriminatorConvention . ElementName , discriminator ) ) ;
1325
+ Query . NotExists ( elementName + ".0" ) , // trick to check that element is not an array
1326
+ Query . EQ ( elementName , discriminator ) ) ;
1327
1327
}
1328
1328
}
1329
1329
@@ -1344,7 +1344,13 @@ private IMongoQuery BuildTypeIsQuery(TypeBinaryExpression typeBinaryExpression)
1344
1344
discriminator = discriminator . AsBsonArray [ discriminator . AsBsonArray . Count - 1 ] ;
1345
1345
}
1346
1346
1347
- return Query . EQ ( discriminatorConvention . ElementName , discriminator ) ;
1347
+ var elementName = discriminatorConvention . ElementName ;
1348
+ var serializationInfo = _serializationInfoHelper . GetSerializationInfo ( typeBinaryExpression . Expression ) ;
1349
+ if ( serializationInfo . ElementName != null )
1350
+ {
1351
+ elementName = string . Format ( "{0}.{1}" , serializationInfo . ElementName , elementName ) ;
1352
+ }
1353
+ return Query . EQ ( elementName , discriminator ) ;
1348
1354
}
1349
1355
1350
1356
private string GetTrimCharsPattern ( Expression trimCharsExpression )
0 commit comments