Skip to content

Commit a29fb13

Browse files
committed
CSHARP-1542: support TypeAs expressions.
1 parent 98538f6 commit a29fb13

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

src/MongoDB.Driver.Tests/UpdateDefinitionBuilderTests.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,18 @@ public void Set_Typed_with_cast()
521521
Assert(subject2.Set(x => ((SmsMessage)x.Message).PhoneNumber, "1234567890"), "{$set: {'m.pn': '1234567890'}}");
522522
}
523523

524+
[Test]
525+
public void Set_Typed_with_type_as()
526+
{
527+
var subject = CreateSubject<Message>();
528+
529+
Assert(subject.Set(x => (x as SmsMessage).PhoneNumber, "1234567890"), "{$set: {pn: '1234567890'}}");
530+
531+
var subject2 = CreateSubject<Person>();
532+
533+
Assert(subject2.Set(x => (x.Message as SmsMessage).PhoneNumber, "1234567890"), "{$set: {'m.pn': '1234567890'}}");
534+
}
535+
524536
[Test]
525537
public void SetOnInsert()
526538
{

src/MongoDB.Driver/Linq/Processors/SerializationBinder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ protected override Expression VisitMethodCall(MethodCallExpression node)
185185
protected override Expression VisitUnary(UnaryExpression node)
186186
{
187187
var newNode = (UnaryExpression)base.VisitUnary(node);
188-
if (newNode.NodeType == ExpressionType.Convert || newNode.NodeType == ExpressionType.ConvertChecked)
188+
if (newNode.NodeType == ExpressionType.Convert || newNode.NodeType == ExpressionType.ConvertChecked || newNode.NodeType == ExpressionType.TypeAs)
189189
{
190190
// handle unnecessary convert expressions
191191
if (newNode.Method == null && !newNode.IsLiftedToNull && newNode.Type.IsAssignableFrom(newNode.Operand.Type))

0 commit comments

Comments
 (0)