Skip to content

Commit 5ec9ef1

Browse files
committed
stash
1 parent 295e2b1 commit 5ec9ef1

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

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

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1613,14 +1613,24 @@ void DeduceGroupByMethodSerializers()
16131613

16141614
if (method.IsOneOf(EnumerableMethod.GroupByWithKeySelector, QueryableMethod.GroupByWithKeySelector))
16151615
{
1616-
DeduceResultSerializer(keySelectorLambda.Body, keySelectorParameter);
1616+
if (IsNotKnown(node) && IsKnown(keySelectorLambda.Body, out var keySerializer) && IsItemSerializerKnown(sourceExpression, out var elementSerializer))
1617+
{
1618+
var groupingSerializer = IGroupingSerializer.Create(keySerializer, elementSerializer);
1619+
var nodeSerializer = IEnumerableOrIQueryableSerializer.Create(node.Type, groupingSerializer);
1620+
AddKnownSerializer(node, nodeSerializer);
1621+
}
16171622
}
16181623
else if (method.IsOneOf(EnumerableMethod.GroupByWithKeySelectorAndElementSelector, QueryableMethod.GroupByWithKeySelectorAndElementSelector))
16191624
{
16201625
var elementSelectorLambda = ExpressionHelper.UnquoteLambdaIfQueryableMethod(method, arguments[2]);
16211626
var elementSelectorParameter = elementSelectorLambda.Parameters.Single();
16221627
DeduceItemAndCollectionSerializers(elementSelectorParameter, sourceExpression);
1623-
DeduceResultSerializer(keySelectorLambda.Body, elementSelectorLambda.Body);
1628+
if (IsNotKnown(node) && IsKnown(keySelectorLambda.Body, out var keySerializer) && IsKnown(elementSelectorLambda.Body, out var elementSerializer))
1629+
{
1630+
var groupingSerializer = IGroupingSerializer.Create(keySerializer, elementSerializer);
1631+
var nodeSerializer = IEnumerableOrIQueryableSerializer.Create(node.Type, groupingSerializer);
1632+
AddKnownSerializer(node, nodeSerializer);
1633+
}
16241634
}
16251635
else if (method.IsOneOf(EnumerableMethod.GroupByWithKeySelectorAndResultSelector, QueryableMethod.GroupByWithKeySelectorAndResultSelector))
16261636
{
@@ -1630,7 +1640,7 @@ void DeduceGroupByMethodSerializers()
16301640
DeduceItemAndCollectionSerializers(keySelectorParameter, sourceExpression);
16311641
DeduceSerializers(resultSelectorKeyParameter, keySelectorLambda.Body);
16321642
DeduceCollectionAndCollectionSerializers(resultSelectorElementsParameter, sourceExpression);
1633-
DeduceResultSerializer(keySelectorLambda.Body, resultSelectorLambda.Body);
1643+
DeduceResultSerializer(resultSelectorLambda.Body);
16341644
}
16351645
else if (method.IsOneOf(EnumerableMethod.GroupByWithKeySelectorElementSelectorAndResultSelector, QueryableMethod.GroupByWithKeySelectorElementSelectorAndResultSelector))
16361646
{
@@ -1643,15 +1653,15 @@ void DeduceGroupByMethodSerializers()
16431653
DeduceItemAndCollectionSerializers(elementSelectorParameter, sourceExpression);
16441654
DeduceSerializers(resultSelectorKeyParameter, keySelectorLambda.Body);
16451655
DeduceCollectionAndItemSerializers(resultSelectorElementsParameter, elementSelectorLambda.Body);
1646-
DeduceResultSerializer(keySelectorLambda.Body, resultSelectorLambda.Body);
1656+
DeduceResultSerializer(resultSelectorLambda.Body);
16471657
}
16481658

1649-
void DeduceResultSerializer(Expression keyExpression, Expression elementExpression)
1659+
void DeduceResultSerializer(Expression resultExpression)
16501660
{
1651-
if (IsNotKnown(node) && IsKnown(keyExpression, out var keySerializer) && IsKnown(elementExpression, out var elementSerializer))
1661+
if (IsNotKnown(node) && IsKnown(resultExpression, out var resultSerializer))
16521662
{
1653-
var groupingSerializer = IGroupingSerializer.Create(keySerializer, elementSerializer);
1654-
AddKnownSerializer(node, IEnumerableOrIQueryableSerializer.Create(node.Type, groupingSerializer));
1663+
var nodeSerializer = IEnumerableOrIQueryableSerializer.Create(node.Type, resultSerializer);
1664+
AddKnownSerializer(node, nodeSerializer);
16551665
}
16561666
}
16571667
}

0 commit comments

Comments
 (0)