Skip to content

Commit 90689e4

Browse files
craiggwilsonrstam
authored andcommitted
CSHARP-1660: added support for $strLenCP.
1 parent 83ec087 commit 90689e4

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

src/MongoDB.Driver/Linq/Translators/AggregateLanguageTranslator.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,12 @@ private BsonValue TranslateMemberAccess(MemberExpression node)
310310
return result;
311311
}
312312

313+
if (node.Expression.Type == typeof(string)
314+
&& TryTranslateStringMemberAccess(node, out result))
315+
{
316+
return result;
317+
}
318+
313319
var expressionType = node.Expression.Type;
314320
if (node.Expression != null
315321
&& (expressionType.ImplementsInterface(typeof(ICollection<>))
@@ -701,6 +707,20 @@ private bool TryTranslateDateTimeMemberAccess(MemberExpression node, out BsonVal
701707
return false;
702708
}
703709

710+
private bool TryTranslateStringMemberAccess(MemberExpression node, out BsonValue result)
711+
{
712+
result = null;
713+
var field = TranslateValue(node.Expression);
714+
switch (node.Member.Name)
715+
{
716+
case "Length":
717+
result = new BsonDocument("$strLenCP", field);
718+
return true;
719+
}
720+
721+
return false;
722+
}
723+
704724
private bool TryTranslateFirstResultOperator(PipelineExpression node, out BsonValue result)
705725
{
706726
var resultOperator = node.ResultOperator as FirstResultOperator;

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1093,6 +1093,18 @@ public void Should_translate_select_with_an_anonymous_type_then_where_to_map_the
10931093
result.Value.Result.Single().F.Should().Be(33);
10941094
}
10951095

1096+
[SkippableFact]
1097+
public void Should_translate_string_length()
1098+
{
1099+
RequireServer.Where(minimumVersion: "3.3.4");
1100+
1101+
var result = Project(x => new { Result = x.A.Length });
1102+
1103+
result.Projection.Should().Be("{ Result: { \"$strLenCP\": \"$A\" }, _id: 0 }");
1104+
1105+
result.Value.Result.Should().Be(7);
1106+
}
1107+
10961108
[SkippableFact]
10971109
public void Should_translate_stdDevPop()
10981110
{

0 commit comments

Comments
 (0)