Skip to content

Commit cadbca5

Browse files
committed
Work in progress.
1 parent 116b643 commit cadbca5

File tree

3 files changed

+22
-7
lines changed

3 files changed

+22
-7
lines changed

src/MongoDB.Driver/Linq/Linq3Implementation/KnownSerializerFinders/KnownSerializerFinderVisitBinary.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,21 @@ protected override Expression VisitBinary(BinaryExpression node)
7171
if (IsNotKnown(node) &&
7272
IsKnown(leftExpression, out var leftSerializer))
7373
{
74-
AddKnownSerializer(node, leftSerializer);
74+
if (leftSerializer.ValueType == node.Type)
75+
{
76+
AddKnownSerializer(node, leftSerializer);
77+
}
78+
else if (
79+
leftSerializer is INullableSerializer nullableSerializer &&
80+
nullableSerializer.ValueSerializer is var nullableSerializerValueSerializer &&
81+
nullableSerializerValueSerializer.ValueType == node.Type)
82+
{
83+
AddKnownSerializer(node, nullableSerializerValueSerializer);
84+
}
85+
else
86+
{
87+
DeduceUnknowableSerializer(node);
88+
}
7589
}
7690
}
7791

src/MongoDB.Driver/Linq/Linq3Implementation/KnownSerializerFinders/KnownSerializerFinderVisitNew.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ protected override Expression VisitNew(NewExpression node)
3636
if (IsKnown(node, out var nodeSerializer) &&
3737
arguments.Any(IsNotKnown))
3838
{
39-
if (nodeSerializer is IBsonDocumentSerializer)
39+
if (!typeof(BsonValue).IsAssignableFrom(node.Type) &&
40+
nodeSerializer is IBsonDocumentSerializer)
4041
{
4142
var matchingMemberSerializationInfos = nodeSerializer.GetMatchingMemberSerializationInfosForConstructorParameters(node, node.Constructor);
4243
for (var i = 0; i < matchingMemberSerializationInfos.Count; i++)
@@ -70,7 +71,7 @@ IBsonSerializer GetKnownSerializer(ConstructorInfo constructor)
7071
{
7172
if (constructor == null)
7273
{
73-
return null;
74+
return CreateNewExpressionSerializer(node, node, bindings: null);
7475
}
7576
else if (constructor.DeclaringType == typeof(BsonDocument))
7677
{
@@ -91,7 +92,7 @@ IBsonSerializer GetKnownSerializer(ConstructorInfo constructor)
9192
itemSerializer is IKeyValuePairSerializer keyValuePairSerializer)
9293
{
9394
var keySerializer = keyValuePairSerializer.KeySerializer;
94-
var valueSerializer = keyValuePairSerializer.ValueSerializer;
95+
var valueSerializer = keyValuePairSerializer.ValueSerializer;
9596
return DictionarySerializer.Create(keySerializer, valueSerializer);
9697
}
9798
}
@@ -123,7 +124,7 @@ IBsonSerializer GetKnownSerializer(ConstructorInfo constructor)
123124
}
124125
else if (TupleOrValueTupleConstructor.IsTupleOrValueTupleConstructor(constructor))
125126
{
126-
if (AllAreKnown(arguments,out var argumentSerializers))
127+
if (AllAreKnown(arguments, out var argumentSerializers))
127128
{
128129
return TupleOrValueTupleSerializer.Create(constructor.DeclaringType, argumentSerializers);
129130
}

tests/MongoDB.Driver.Tests/Linq/Linq3Implementation/Jira/CSharp5532Tests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public void Projection_should_translate_correctly()
105105
{
106106
input : "$$p.Refs",
107107
as : "j",
108-
in : { $in : ["$$j._id", ["222222222222222222222222"]] }
108+
in : { $in : ["$$j._id", [{ "$oid" : "222222222222222222222222" }]] }
109109
}
110110
}
111111
}
@@ -119,7 +119,7 @@ public void Projection_should_translate_correctly()
119119
}
120120
},
121121
as : "j",
122-
cond : { $in : ['$$j._id', ["222222222222222222222222"]] }
122+
cond : { $in : ['$$j._id', [{ "$oid" : "222222222222222222222222" }]] }
123123
}
124124
},
125125
0

0 commit comments

Comments
 (0)