@@ -800,68 +800,51 @@ public override void VisitOrdering(Ordering ordering, QueryModel queryModel, Ord
800800 public override void VisitResultOperator ( ResultOperatorBase resultOperator , QueryModel queryModel , int index )
801801 {
802802 _string . Append ( " => " ) ;
803+
804+ // Custom visitors for operators that do not expose all information with TransformExpressions method in order to mimic their ToString method
803805 switch ( resultOperator )
804806 {
805- case AllResultOperator allResult :
806- VisitResultOperator ( "All" , allResult . Predicate ) ;
807- break ;
808- case AggregateResultOperator aggregateResult :
809- VisitResultOperator ( "Aggregate" , aggregateResult . Func ) ;
810- break ;
811- case ContainsResultOperator containsResult :
812- VisitResultOperator ( "Contains" , containsResult . Item ) ;
813- break ;
814- case AggregateFromSeedResultOperator aggregateFromSeedResult :
815- VisitAggregateFromSeedResultOperator ( aggregateFromSeedResult ) ;
816- break ;
817807 case CastResultOperator castResult :
818808 VisitTypeChangeOperator ( "Cast" , castResult . CastItemType ) ;
819809 break ;
820- case ConcatResultOperator concatResult :
821- VisitResultOperator ( "Concat" , concatResult . Source2 ) ;
822- break ;
823- case DefaultIfEmptyResultOperator defaultIfEmptyResult :
824- VisitDefaultIfEmptyResultOperator ( defaultIfEmptyResult ) ;
825- break ;
826- case ExceptResultOperator exceptResult :
827- VisitResultOperator ( "Except" , exceptResult . Source2 ) ;
828- break ;
829810 case FetchRequestBase fetchBase :
830811 VisitFetchRequestBase ( fetchBase ) ;
831812 break ;
832- case ChoiceResultOperatorBase choiceResult :
833- VisitChoiceResultOperatorBase ( choiceResult ) ;
834- break ;
835- case GroupResultOperator groupResult :
836- GroupResultOperator ( groupResult ) ;
837- break ;
838- case IntersectResultOperator intersectResult :
839- VisitResultOperator ( "Intersect" , intersectResult . Source2 ) ;
813+ case ChoiceResultOperatorBase operatorBase :
814+ VisitChoiceResultOperatorBase ( operatorBase ) ;
840815 break ;
841816 case OfTypeResultOperator ofTypeResult :
842817 VisitTypeChangeOperator ( "OfType" , ofTypeResult . SearchedItemType ) ;
843818 break ;
844- case SkipResultOperator skipResult :
845- VisitResultOperator ( "Skip" , skipResult . Count ) ;
846- break ;
847- case TakeResultOperator takeResult :
848- VisitResultOperator ( "Take" , takeResult . Count ) ;
849- break ;
850- case UnionResultOperator unionResult :
851- VisitResultOperator ( "Union" , unionResult . Source2 ) ;
852- break ;
853819 default :
854- _string . Append ( resultOperator ) ;
820+ VisitResultOperatorBase ( resultOperator ) ;
855821 break ;
856822 }
857823 }
858824
859- private void GroupResultOperator ( GroupResultOperator resultOperator )
825+ private void VisitResultOperatorBase ( ResultOperatorBase resultOperator )
860826 {
861- _string . Append ( "GroupBy(" ) ;
862- _keyVisitor . Visit ( resultOperator . KeySelector ) ;
863- _string . Append ( ',' ) ;
864- _keyVisitor . Visit ( resultOperator . ElementSelector ) ;
827+ _string . Append ( resultOperator . GetType ( ) . Name . Replace ( "ResultOperator" , "(" ) ) ;
828+ var index = 0 ;
829+ resultOperator . TransformExpressions (
830+ expression =>
831+ {
832+ if ( expression == null )
833+ {
834+ return null ;
835+ }
836+
837+ if ( index > 0 )
838+ {
839+ _string . Append ( ',' ) ;
840+ }
841+
842+ _keyVisitor . Visit ( expression ) ;
843+ index ++ ;
844+
845+ return expression ;
846+ } ) ;
847+
865848 _string . Append ( ')' ) ;
866849 }
867850
@@ -890,32 +873,6 @@ private void VisitFetchRequestBase(FetchRequestBase fetchBase)
890873 }
891874 }
892875
893- private void VisitDefaultIfEmptyResultOperator ( DefaultIfEmptyResultOperator resultOperator )
894- {
895- _string . Append ( "DefaultIfEmpty(" ) ;
896- if ( resultOperator . OptionalDefaultValue != null )
897- {
898- _keyVisitor . Visit ( resultOperator . OptionalDefaultValue ) ;
899- }
900-
901- _string . Append ( ')' ) ;
902- }
903-
904- private void VisitAggregateFromSeedResultOperator ( AggregateFromSeedResultOperator resultOperator )
905- {
906- _string . Append ( "Aggregate(" ) ;
907- _keyVisitor . Visit ( resultOperator . Seed ) ;
908- _string . Append ( ',' ) ;
909- _keyVisitor . Visit ( resultOperator . Func ) ;
910- if ( resultOperator . OptionalResultSelector != null )
911- {
912- _string . Append ( ',' ) ;
913- _keyVisitor . Visit ( resultOperator . OptionalResultSelector ) ;
914- }
915-
916- _string . Append ( ')' ) ;
917- }
918-
919876 private void VisitTypeChangeOperator ( string name , System . Type type )
920877 {
921878 _string . Append ( name ) ;
@@ -924,14 +881,6 @@ private void VisitTypeChangeOperator(string name, System.Type type)
924881 _string . Append ( ">()" ) ;
925882 }
926883
927- private void VisitResultOperator ( string name , Expression expression )
928- {
929- _string . Append ( name ) ;
930- _string . Append ( "(" ) ;
931- _keyVisitor . Visit ( expression ) ;
932- _string . Append ( ")" ) ;
933- }
934-
935884 private void VisitJoin ( System . Type itemType , string itemName , Expression expression )
936885 {
937886 _string . Append ( " join " ) ;
0 commit comments