@@ -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