@@ -94,7 +94,7 @@ internal partial class KnownSerializerFinderVisitor
9494 QueryableMethod . Prepend
9595 ] ;
9696
97- private static readonly HashSet < MethodInfo > __averageMethods =
97+ private static readonly HashSet < MethodInfo > __averageOrMedianOrPercentileMethods =
9898 [
9999 EnumerableMethod . AverageDecimal ,
100100 EnumerableMethod . AverageDecimalWithSelector ,
@@ -135,10 +135,50 @@ internal partial class KnownSerializerFinderVisitor
135135 QueryableMethod . AverageNullableSingle ,
136136 QueryableMethod . AverageNullableSingleWithSelector ,
137137 QueryableMethod . AverageSingle ,
138- QueryableMethod . AverageSingleWithSelector
138+ QueryableMethod . AverageSingleWithSelector ,
139+ MongoEnumerableMethod . MedianDecimal ,
140+ MongoEnumerableMethod . MedianDecimalWithSelector ,
141+ MongoEnumerableMethod . MedianDouble ,
142+ MongoEnumerableMethod . MedianDoubleWithSelector ,
143+ MongoEnumerableMethod . MedianInt32 ,
144+ MongoEnumerableMethod . MedianInt32WithSelector ,
145+ MongoEnumerableMethod . MedianInt64 ,
146+ MongoEnumerableMethod . MedianInt64WithSelector ,
147+ MongoEnumerableMethod . MedianNullableDecimal ,
148+ MongoEnumerableMethod . MedianNullableDecimalWithSelector ,
149+ MongoEnumerableMethod . MedianNullableDouble ,
150+ MongoEnumerableMethod . MedianNullableDoubleWithSelector ,
151+ MongoEnumerableMethod . MedianNullableInt32 ,
152+ MongoEnumerableMethod . MedianNullableInt32WithSelector ,
153+ MongoEnumerableMethod . MedianNullableInt64 ,
154+ MongoEnumerableMethod . MedianNullableInt64WithSelector ,
155+ MongoEnumerableMethod . MedianNullableSingle ,
156+ MongoEnumerableMethod . MedianNullableSingleWithSelector ,
157+ MongoEnumerableMethod . MedianSingle ,
158+ MongoEnumerableMethod . MedianSingleWithSelector ,
159+ MongoEnumerableMethod . PercentileDecimal ,
160+ MongoEnumerableMethod . PercentileDecimalWithSelector ,
161+ MongoEnumerableMethod . PercentileDouble ,
162+ MongoEnumerableMethod . PercentileDoubleWithSelector ,
163+ MongoEnumerableMethod . PercentileInt32 ,
164+ MongoEnumerableMethod . PercentileInt32WithSelector ,
165+ MongoEnumerableMethod . PercentileInt64 ,
166+ MongoEnumerableMethod . PercentileInt64WithSelector ,
167+ MongoEnumerableMethod . PercentileNullableDecimal ,
168+ MongoEnumerableMethod . PercentileNullableDecimalWithSelector ,
169+ MongoEnumerableMethod . PercentileNullableDouble ,
170+ MongoEnumerableMethod . PercentileNullableDoubleWithSelector ,
171+ MongoEnumerableMethod . PercentileNullableInt32 ,
172+ MongoEnumerableMethod . PercentileNullableInt32WithSelector ,
173+ MongoEnumerableMethod . PercentileNullableInt64 ,
174+ MongoEnumerableMethod . PercentileNullableInt64WithSelector ,
175+ MongoEnumerableMethod . PercentileNullableSingle ,
176+ MongoEnumerableMethod . PercentileNullableSingleWithSelector ,
177+ MongoEnumerableMethod . PercentileSingle ,
178+ MongoEnumerableMethod . PercentileSingleWithSelector
139179 ] ;
140180
141- private static readonly HashSet < MethodInfo > __averageWithSelectorMethods =
181+ private static readonly HashSet < MethodInfo > __averageOrMedianOrPercentileWithSelectorMethods =
142182 [
143183 EnumerableMethod . AverageDecimalWithSelector ,
144184 EnumerableMethod . AverageDoubleWithSelector ,
@@ -159,7 +199,27 @@ internal partial class KnownSerializerFinderVisitor
159199 QueryableMethod . AverageNullableInt32WithSelector ,
160200 QueryableMethod . AverageNullableInt64WithSelector ,
161201 QueryableMethod . AverageNullableSingleWithSelector ,
162- QueryableMethod . AverageSingleWithSelector
202+ QueryableMethod . AverageSingleWithSelector ,
203+ MongoEnumerableMethod . MedianDecimalWithSelector ,
204+ MongoEnumerableMethod . MedianDoubleWithSelector ,
205+ MongoEnumerableMethod . MedianInt32WithSelector ,
206+ MongoEnumerableMethod . MedianInt64WithSelector ,
207+ MongoEnumerableMethod . MedianNullableDecimalWithSelector ,
208+ MongoEnumerableMethod . MedianNullableDoubleWithSelector ,
209+ MongoEnumerableMethod . MedianNullableInt32WithSelector ,
210+ MongoEnumerableMethod . MedianNullableInt64WithSelector ,
211+ MongoEnumerableMethod . MedianNullableSingleWithSelector ,
212+ MongoEnumerableMethod . MedianSingleWithSelector ,
213+ MongoEnumerableMethod . PercentileDecimalWithSelector ,
214+ MongoEnumerableMethod . PercentileDoubleWithSelector ,
215+ MongoEnumerableMethod . PercentileInt32WithSelector ,
216+ MongoEnumerableMethod . PercentileInt64WithSelector ,
217+ MongoEnumerableMethod . PercentileNullableDecimalWithSelector ,
218+ MongoEnumerableMethod . PercentileNullableDoubleWithSelector ,
219+ MongoEnumerableMethod . PercentileNullableInt32WithSelector ,
220+ MongoEnumerableMethod . PercentileNullableInt64WithSelector ,
221+ MongoEnumerableMethod . PercentileNullableSingleWithSelector ,
222+ MongoEnumerableMethod . PercentileSingleWithSelector
163223 ] ;
164224
165225 private static readonly HashSet < MethodInfo > __countMethods =
@@ -358,6 +418,7 @@ internal partial class KnownSerializerFinderVisitor
358418 EnumerableMethod . MaxNullableInt64WithSelector ,
359419 EnumerableMethod . MaxNullableSingleWithSelector ,
360420 EnumerableMethod . MaxSingleWithSelector ,
421+ EnumerableMethod . MaxWithSelector ,
361422 EnumerableMethod . MinDecimalWithSelector ,
362423 EnumerableMethod . MinDoubleWithSelector ,
363424 EnumerableMethod . MinInt32WithSelector ,
@@ -700,7 +761,6 @@ void DeduceMethodCallSerializers()
700761 case "Atan" : DeduceAtanMethodSerializers ( ) ; break ;
701762 case "Atanh" : DeduceAtanhMethodSerializers ( ) ; break ;
702763 case "Atan2" : DeduceAtan2MethodSerializers ( ) ; break ;
703- case "Average" : DeduceAverageMethodSerializers ( ) ; break ;
704764 case "CompareTo" : DeduceCompareToMethodSerializers ( ) ; break ;
705765 case "Concat" : DeduceConcatMethodSerializers ( ) ; break ;
706766 case "Constant" : DeduceConstantMethodSerializers ( ) ; break ;
@@ -725,7 +785,6 @@ void DeduceMethodCallSerializers()
725785 case "Inject" : DeduceInjectMethodSerializers ( ) ; break ;
726786 case "Intersect" : DeduceIntersectMethodSerializers ( ) ; break ;
727787 case "IsMatch" : DeduceIsMatchMethodSerializers ( ) ; break ;
728- case "IsNullOrEmpty" : DeduceIsNullOrEmptyMethodSerializers ( ) ; break ;
729788 case "IsSubsetOf" : DeduceIsSubsetOfMethodSerializers ( ) ; break ;
730789 case "Join" : DeduceJoinMethodSerializers ( ) ; break ;
731790 case "Lookup" : DeduceLookupMethodSerializers ( ) ; break ;
@@ -770,6 +829,12 @@ void DeduceMethodCallSerializers()
770829 DeduceAppendOrPrependMethodSerializers ( ) ;
771830 break ;
772831
832+ case "Average" :
833+ case "Median" :
834+ case "Percentile" :
835+ DeduceAverageOrMedianOrPercentileMethodSerializers ( ) ;
836+ break ;
837+
773838 case "Bottom" :
774839 case "BottomN" :
775840 case "FirstN" :
@@ -820,6 +885,11 @@ void DeduceMethodCallSerializers()
820885 DeduceIsMissingOrIsNullOrMissingMethodSerializers ( ) ;
821886 break ;
822887
888+ case "IsNullOrEmpty" :
889+ case "IsNullOrWhiteSpace" :
890+ DeduceIsNullOrEmptyOrIsNullOrWhiteSpaceMethodSerializers ( ) ;
891+ break ;
892+
823893 case "Ln" :
824894 case "Log" :
825895 case "Log10" :
@@ -1295,11 +1365,11 @@ void DeduceAtan2MethodSerializers()
12951365 }
12961366 }
12971367
1298- void DeduceAverageMethodSerializers ( )
1368+ void DeduceAverageOrMedianOrPercentileMethodSerializers ( )
12991369 {
1300- if ( method . IsOneOf ( __averageMethods ) )
1370+ if ( method . IsOneOf ( __averageOrMedianOrPercentileMethods ) )
13011371 {
1302- if ( method . IsOneOf ( __averageWithSelectorMethods ) )
1372+ if ( method . IsOneOf ( __averageOrMedianOrPercentileWithSelectorMethods ) )
13031373 {
13041374 var sourceExpression = arguments [ 0 ] ;
13051375 var selectorLambda = ExpressionHelper . UnquoteLambdaIfQueryableMethod ( method , arguments [ 1 ] ) ;
@@ -1308,7 +1378,11 @@ void DeduceAverageMethodSerializers()
13081378 DeduceItemAndCollectionSerializers ( selectorSourceItemParameter , sourceExpression ) ;
13091379 }
13101380
1311- DeduceReturnsNumericOrNullableNumericSerializer ( ) ;
1381+ if ( IsNotKnown ( node ) )
1382+ {
1383+ var nodeSerializer = StandardSerializers . GetSerializer ( node . Type ) ;
1384+ AddKnownSerializer ( node , nodeSerializer ) ;
1385+ }
13121386 }
13131387 else
13141388 {
@@ -2090,9 +2164,9 @@ void DeduceJoinMethodSerializers()
20902164 }
20912165 }
20922166
2093- void DeduceIsNullOrEmptyMethodSerializers ( )
2167+ void DeduceIsNullOrEmptyOrIsNullOrWhiteSpaceMethodSerializers ( )
20942168 {
2095- if ( method . Is ( StringMethod . IsNullOrEmpty ) )
2169+ if ( method . IsOneOf ( StringMethod . IsNullOrEmpty , StringMethod . IsNullOrWhiteSpace ) )
20962170 {
20972171 DeduceReturnsBooleanSerializer ( ) ;
20982172 }
@@ -2619,7 +2693,7 @@ void DeduceReturnsSingleSerializer()
26192693 {
26202694 if ( IsNotKnown ( node ) )
26212695 {
2622- AddKnownSerializer ( node , DoubleSerializer . Instance ) ;
2696+ AddKnownSerializer ( node , SingleSerializer . Instance ) ;
26232697 }
26242698 }
26252699
0 commit comments