2727using MongoDB . Bson . Serialization . Options ;
2828using MongoDB . Driver . Builders ;
2929using MongoDB . Driver . Linq . Utils ;
30+ using MongoDB . Bson . Serialization . Conventions ;
3031
3132namespace MongoDB . Driver . Linq
3233{
@@ -1291,14 +1292,7 @@ private IMongoQuery BuildTypeComparisonQuery(Expression variableExpression, Expr
12911292 return null ;
12921293 }
12931294
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 ) ;
13021296 var nominalType = serializationInfo . NominalType ;
13031297
13041298 var discriminatorConvention = BsonSerializer . LookupDiscriminatorConvention ( nominalType ) ;
@@ -1308,22 +1302,28 @@ private IMongoQuery BuildTypeComparisonQuery(Expression variableExpression, Expr
13081302 return BuildBooleanQuery ( true ) ;
13091303 }
13101304
1305+ var elementName = discriminatorConvention . ElementName ;
1306+ if ( serializationInfo . ElementName != null )
1307+ {
1308+ elementName = string . Format ( "{0}.{1}" , serializationInfo . ElementName , elementName ) ;
1309+ }
1310+
13111311 if ( discriminator . IsBsonArray )
13121312 {
13131313 var discriminatorArray = discriminator . AsBsonArray ;
13141314 var queries = new IMongoQuery [ discriminatorArray . Count + 1 ] ;
1315- queries [ 0 ] = Query . Size ( discriminatorConvention . ElementName , discriminatorArray . Count ) ;
1315+ queries [ 0 ] = Query . Size ( elementName , discriminatorArray . Count ) ;
13161316 for ( var i = 0 ; i < discriminatorArray . Count ; i ++ )
13171317 {
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 ] ) ;
13191319 }
13201320 return Query . And ( queries ) ;
13211321 }
13221322 else
13231323 {
13241324 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 ) ) ;
13271327 }
13281328 }
13291329
@@ -1344,7 +1344,13 @@ private IMongoQuery BuildTypeIsQuery(TypeBinaryExpression typeBinaryExpression)
13441344 discriminator = discriminator . AsBsonArray [ discriminator . AsBsonArray . Count - 1 ] ;
13451345 }
13461346
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 ) ;
13481354 }
13491355
13501356 private string GetTrimCharsPattern ( Expression trimCharsExpression )
0 commit comments