@@ -800,68 +800,51 @@ public override void VisitOrdering(Ordering ordering, QueryModel queryModel, Ord
800
800
public override void VisitResultOperator ( ResultOperatorBase resultOperator , QueryModel queryModel , int index )
801
801
{
802
802
_string . Append ( " => " ) ;
803
+
804
+ // Custom visitors for operators that do not expose all information with TransformExpressions method in order to mimic their ToString method
803
805
switch ( resultOperator )
804
806
{
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 ;
817
807
case CastResultOperator castResult :
818
808
VisitTypeChangeOperator ( "Cast" , castResult . CastItemType ) ;
819
809
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 ;
829
810
case FetchRequestBase fetchBase :
830
811
VisitFetchRequestBase ( fetchBase ) ;
831
812
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 ) ;
840
815
break ;
841
816
case OfTypeResultOperator ofTypeResult :
842
817
VisitTypeChangeOperator ( "OfType" , ofTypeResult . SearchedItemType ) ;
843
818
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 ;
853
819
default :
854
- _string . Append ( resultOperator ) ;
820
+ VisitResultOperatorBase ( resultOperator ) ;
855
821
break ;
856
822
}
857
823
}
858
824
859
- private void GroupResultOperator ( GroupResultOperator resultOperator )
825
+ private void VisitResultOperatorBase ( ResultOperatorBase resultOperator )
860
826
{
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
+
865
848
_string . Append ( ')' ) ;
866
849
}
867
850
@@ -890,32 +873,6 @@ private void VisitFetchRequestBase(FetchRequestBase fetchBase)
890
873
}
891
874
}
892
875
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
-
919
876
private void VisitTypeChangeOperator ( string name , System . Type type )
920
877
{
921
878
_string . Append ( name ) ;
@@ -924,14 +881,6 @@ private void VisitTypeChangeOperator(string name, System.Type type)
924
881
_string . Append ( ">()" ) ;
925
882
}
926
883
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
-
935
884
private void VisitJoin ( System . Type itemType , string itemName , Expression expression )
936
885
{
937
886
_string . Append ( " join " ) ;
0 commit comments