@@ -61,9 +61,11 @@ public IMongoQuery BuildQuery(Expression expression)
6161 switch ( expression . NodeType )
6262 {
6363 case ExpressionType . And :
64- case ExpressionType . AndAlso :
6564 query = BuildAndQuery ( ( BinaryExpression ) expression ) ;
6665 break ;
66+ case ExpressionType . AndAlso :
67+ query = BuildAndAlsoQuery ( ( BinaryExpression ) expression ) ;
68+ break ;
6769 case ExpressionType . ArrayIndex :
6870 query = BuildBooleanQuery ( expression ) ;
6971 break ;
@@ -88,9 +90,11 @@ public IMongoQuery BuildQuery(Expression expression)
8890 query = BuildNotQuery ( ( UnaryExpression ) expression ) ;
8991 break ;
9092 case ExpressionType . Or :
91- case ExpressionType . OrElse :
9293 query = BuildOrQuery ( ( BinaryExpression ) expression ) ;
9394 break ;
95+ case ExpressionType . OrElse :
96+ query = BuildOrElseQuery ( ( BinaryExpression ) expression ) ;
97+ break ;
9498 case ExpressionType . TypeIs :
9599 query = BuildTypeIsQuery ( ( TypeBinaryExpression ) expression ) ;
96100 break ;
@@ -106,11 +110,21 @@ public IMongoQuery BuildQuery(Expression expression)
106110 }
107111
108112 // private methods
109- private IMongoQuery BuildAndQuery ( BinaryExpression binaryExpression )
113+ private IMongoQuery BuildAndAlsoQuery ( BinaryExpression binaryExpression )
110114 {
111115 return Query . And ( BuildQuery ( binaryExpression . Left ) , BuildQuery ( binaryExpression . Right ) ) ;
112116 }
113117
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+
114128 private IMongoQuery BuildAnyQuery ( MethodCallExpression methodCallExpression )
115129 {
116130 if ( methodCallExpression . Method . DeclaringType == typeof ( Enumerable ) )
@@ -775,11 +789,21 @@ private IMongoQuery BuildNotQuery(UnaryExpression unaryExpression)
775789 return Query . Not ( queryDocument ) ;
776790 }
777791
778- private IMongoQuery BuildOrQuery ( BinaryExpression binaryExpression )
792+ private IMongoQuery BuildOrElseQuery ( BinaryExpression binaryExpression )
779793 {
780794 return Query . Or ( BuildQuery ( binaryExpression . Left ) , BuildQuery ( binaryExpression . Right ) ) ;
781795 }
782796
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+
783807 private IMongoQuery BuildStringIndexOfQuery ( Expression variableExpression , ExpressionType operatorType , ConstantExpression constantExpression )
784808 {
785809 // TODO: support other comparison operators
0 commit comments