@@ -61,9 +61,11 @@ public IMongoQuery BuildQuery(Expression expression)
61
61
switch ( expression . NodeType )
62
62
{
63
63
case ExpressionType . And :
64
- case ExpressionType . AndAlso :
65
64
query = BuildAndQuery ( ( BinaryExpression ) expression ) ;
66
65
break ;
66
+ case ExpressionType . AndAlso :
67
+ query = BuildAndAlsoQuery ( ( BinaryExpression ) expression ) ;
68
+ break ;
67
69
case ExpressionType . ArrayIndex :
68
70
query = BuildBooleanQuery ( expression ) ;
69
71
break ;
@@ -88,9 +90,11 @@ public IMongoQuery BuildQuery(Expression expression)
88
90
query = BuildNotQuery ( ( UnaryExpression ) expression ) ;
89
91
break ;
90
92
case ExpressionType . Or :
91
- case ExpressionType . OrElse :
92
93
query = BuildOrQuery ( ( BinaryExpression ) expression ) ;
93
94
break ;
95
+ case ExpressionType . OrElse :
96
+ query = BuildOrElseQuery ( ( BinaryExpression ) expression ) ;
97
+ break ;
94
98
case ExpressionType . TypeIs :
95
99
query = BuildTypeIsQuery ( ( TypeBinaryExpression ) expression ) ;
96
100
break ;
@@ -106,11 +110,21 @@ public IMongoQuery BuildQuery(Expression expression)
106
110
}
107
111
108
112
// private methods
109
- private IMongoQuery BuildAndQuery ( BinaryExpression binaryExpression )
113
+ private IMongoQuery BuildAndAlsoQuery ( BinaryExpression binaryExpression )
110
114
{
111
115
return Query . And ( BuildQuery ( binaryExpression . Left ) , BuildQuery ( binaryExpression . Right ) ) ;
112
116
}
113
117
118
+ private IMongoQuery BuildAndQuery ( BinaryExpression binaryExpression )
119
+ {
120
+ if ( binaryExpression . Left . Type == typeof ( bool ) && binaryExpression . Right . Type == typeof ( bool ) )
121
+ {
122
+ return BuildAndAlsoQuery ( binaryExpression ) ;
123
+ }
124
+
125
+ return null ;
126
+ }
127
+
114
128
private IMongoQuery BuildAnyQuery ( MethodCallExpression methodCallExpression )
115
129
{
116
130
if ( methodCallExpression . Method . DeclaringType == typeof ( Enumerable ) )
@@ -775,11 +789,21 @@ private IMongoQuery BuildNotQuery(UnaryExpression unaryExpression)
775
789
return Query . Not ( queryDocument ) ;
776
790
}
777
791
778
- private IMongoQuery BuildOrQuery ( BinaryExpression binaryExpression )
792
+ private IMongoQuery BuildOrElseQuery ( BinaryExpression binaryExpression )
779
793
{
780
794
return Query . Or ( BuildQuery ( binaryExpression . Left ) , BuildQuery ( binaryExpression . Right ) ) ;
781
795
}
782
796
797
+ private IMongoQuery BuildOrQuery ( BinaryExpression binaryExpression )
798
+ {
799
+ if ( binaryExpression . Left . Type == typeof ( bool ) && binaryExpression . Right . Type == typeof ( bool ) )
800
+ {
801
+ return BuildOrElseQuery ( binaryExpression ) ;
802
+ }
803
+
804
+ return null ;
805
+ }
806
+
783
807
private IMongoQuery BuildStringIndexOfQuery ( Expression variableExpression , ExpressionType operatorType , ConstantExpression constantExpression )
784
808
{
785
809
// TODO: support other comparison operators
0 commit comments