Skip to content

Commit 057c592

Browse files
committed
CSHARP-3898: Translate string.IsNullOrEmpty using $in instead of $or/$eq
1 parent 3dd319b commit 057c592

File tree

2 files changed

+2
-9
lines changed

2 files changed

+2
-9
lines changed

src/MongoDB.Driver/Linq/Linq3Implementation/Translators/ExpressionToAggregationExpressionTranslators/MethodTranslators/IsNullOrEmptyMethodToAggregationExpressionTranslator.cs

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
using System.Linq.Expressions;
1717
using MongoDB.Bson;
1818
using MongoDB.Bson.Serialization.Serializers;
19-
using MongoDB.Driver.Linq.Linq3Implementation.Ast;
2019
using MongoDB.Driver.Linq.Linq3Implementation.Ast.Expressions;
2120
using MongoDB.Driver.Linq.Linq3Implementation.Misc;
2221

@@ -33,13 +32,7 @@ public static AggregationExpression Translate(TranslationContext context, Method
3332
{
3433
var stringExpression = arguments[0];
3534
var stringTranslation = ExpressionToAggregationExpressionTranslator.Translate(context, stringExpression);
36-
37-
var (stringVar, stringAst) = AstExpression.UseVarIfNotSimple("this", stringTranslation.Ast);
38-
var ast = AstExpression.Let(
39-
stringVar,
40-
@in: AstExpression.Or(
41-
AstExpression.Eq(stringAst, BsonNull.Value),
42-
AstExpression.Eq(stringAst, "")));
35+
var ast = AstExpression.In(stringTranslation.Ast, new BsonArray { BsonNull.Value, "" });
4336

4437
return new AggregationExpression(expression, ast, new BooleanSerializer());
4538
}

tests/MongoDB.Driver.Tests/Linq/Linq2ImplementationTestsOnLinq3/Translators/AggregateProjectTranslatorTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1549,7 +1549,7 @@ public void Should_translate_string_is_null_or_empty()
15491549
{
15501550
var result = Project(x => new { Result = string.IsNullOrEmpty(x.B) });
15511551

1552-
result.Projection.Should().Be("{ Result: { \"$or\": [{ $eq: [\"$B\", null] }, { $eq: [\"$B\", \"\"] } ] }, _id: 0 }");
1552+
result.Projection.Should().Be("{ Result: { $in : ['$B', [null, '']] }, _id: 0 }");
15531553

15541554
result.Value.Result.Should().BeFalse();
15551555
}

0 commit comments

Comments
 (0)