@@ -34,12 +34,15 @@ namespace MongoDB.Driver.Linq.Translators
34
34
{
35
35
internal sealed class PredicateTranslator
36
36
{
37
+ #region static
38
+ // private static fields
37
39
private static readonly FilterDefinitionBuilder < BsonDocument > __builder = new FilterDefinitionBuilder < BsonDocument > ( ) ;
38
40
41
+ // public static methods
39
42
public static BsonDocument Translate < TDocument > ( Expression < Func < TDocument , bool > > predicate , IBsonSerializer < TDocument > parameterSerializer , IBsonSerializerRegistry serializerRegistry )
40
43
{
41
44
var parameterExpression = new DocumentExpression ( parameterSerializer ) ;
42
- var context = new PipelineBindingContext ( BsonSerializer . SerializerRegistry ) ;
45
+ var context = new PipelineBindingContext ( serializerRegistry ) ;
43
46
context . AddExpressionMapping ( predicate . Parameters [ 0 ] , parameterExpression ) ;
44
47
45
48
var node = PartialEvaluator . Evaluate ( predicate . Body ) ;
@@ -51,16 +54,23 @@ public static BsonDocument Translate<TDocument>(Expression<Func<TDocument, bool>
51
54
52
55
public static BsonDocument Translate ( Expression node , IBsonSerializerRegistry serializerRegistry )
53
56
{
54
- var translator = new PredicateTranslator ( ) ;
57
+ var translator = new PredicateTranslator ( serializerRegistry ) ;
55
58
node = FieldExpressionFlattener . FlattenFields ( node ) ;
56
59
return translator . Translate ( node )
57
60
. Render ( serializerRegistry . GetSerializer < BsonDocument > ( ) , serializerRegistry ) ;
58
61
}
62
+ #endregion
59
63
60
- private PredicateTranslator ( )
64
+ // private fields
65
+ private readonly IBsonSerializerRegistry _serializerRegistry ;
66
+
67
+ // constructors
68
+ private PredicateTranslator ( IBsonSerializerRegistry serializerRegistry )
61
69
{
70
+ _serializerRegistry = serializerRegistry ;
62
71
}
63
72
73
+ // private methods
64
74
private FilterDefinition < BsonDocument > Translate ( Expression node )
65
75
{
66
76
FilterDefinition < BsonDocument > filter = null ;
@@ -443,7 +453,7 @@ private FilterDefinition<BsonDocument> TranslateComparison(Expression variableEx
443
453
444
454
var fieldExpression = GetFieldExpression ( variableExpression ) ;
445
455
446
- var valueSerializer = FieldValueSerializerHelper . GetSerializerForValueType ( fieldExpression . Serializer , BsonSerializer . SerializerRegistry , constantExpression . Type , value ) ;
456
+ var valueSerializer = FieldValueSerializerHelper . GetSerializerForValueType ( fieldExpression . Serializer , _serializerRegistry , constantExpression . Type , value ) ;
447
457
var serializedValue = valueSerializer . ToBsonValue ( value ) ;
448
458
449
459
switch ( operatorType )
@@ -1627,6 +1637,7 @@ private IFieldExpression GetFieldExpression(Expression expression)
1627
1637
return fieldExpression ;
1628
1638
}
1629
1639
1640
+ // nested types
1630
1641
private class DocumentToFieldConverter : ExtensionExpressionVisitor
1631
1642
{
1632
1643
public static Expression Convert ( Expression node )
0 commit comments