@@ -885,56 +885,73 @@ private static void GenerateSelections_QueryGroup(queryGroup queryGroup, ref Dic
885885 return ;
886886
887887 var prefix = string . IsNullOrEmpty ( queryGroup . prefix ) ? string . Empty : queryGroup . prefix ;
888+ var qs = new List < query > ( queryGroup . query ) ;
888889
889890 // Erzeuge erste Abfrage
890- var qs = new List < query > ( queryGroup . query ) ;
891- var selections = GenerateSelections_Compile ( all , $ "{ prefix } { qs [ 0 ] . Text . CleanXmlValue ( ) } ", qs [ 0 ] . name ) ;
892- var merged = selections == null ? new Dictionary < Guid , HashSet < Guid > > ( ) : selections . JoinToDictionary ( ) ;
891+ Dictionary < Guid , HashSet < Guid > > merged ;
892+ Selection [ ] selections ;
893+
894+ try
895+ {
896+ selections = GenerateSelections_Compile ( all , $ "{ prefix } { qs [ 0 ] . Text . CleanXmlValue ( ) } ", qs [ 0 ] . name ) ;
897+ merged = selections == null ? new Dictionary < Guid , HashSet < Guid > > ( ) : selections . JoinToDictionary ( ) ;
898+ }
899+ catch
900+ {
901+ merged = new Dictionary < Guid , HashSet < Guid > > ( ) ;
902+ }
893903
894904 qs . RemoveAt ( 0 ) ; // Entferne erste Abfrage aus der Liste
895905
896906 // Führe alle Folgeabfragen aus.
897907 foreach ( var query in qs )
898908 {
899- selections = GenerateSelections_Compile ( all , $ "{ prefix } { query . Text . CleanXmlValue ( ) } ", "" ) ;
900- var temp = selections == null ? new Dictionary < Guid , HashSet < Guid > > ( ) : selections . JoinToDictionary ( ) ;
901-
902- switch ( queryGroup . @operator )
909+ try
903910 {
904- default :
905- // ReSharper disable once RedundantCaseLabel
906- case "and" : // Ergebnisse müssen mit allen Abfragen übereinstimmen
907- if ( temp . Count == 0 )
908- {
909- merged . Clear ( ) ;
910- break ;
911- }
912- var csels = merged . Keys . ToArray ( ) ;
913- foreach ( var csel in csels )
914- {
915- if ( ! temp . ContainsKey ( csel ) )
911+ selections = GenerateSelections_Compile ( all , $ "{ prefix } { query . Text . CleanXmlValue ( ) } ", "" ) ;
912+ var temp = selections == null ? new Dictionary < Guid , HashSet < Guid > > ( ) : selections . JoinToDictionary ( ) ;
913+
914+ switch ( queryGroup . @operator )
915+ {
916+ default : // "and": // Ergebnisse müssen mit allen Abfragen übereinstimmen
917+ if ( temp . Count == 0 )
916918 {
917- merged . Remove ( csel ) ;
918- continue ;
919+ merged . Clear ( ) ;
920+ break ;
919921 }
922+ var csels = merged . Keys . ToArray ( ) ;
923+ foreach ( var csel in csels )
924+ {
925+ if ( ! temp . ContainsKey ( csel ) )
926+ {
927+ merged . Remove ( csel ) ;
928+ continue ;
929+ }
920930
921- var dsels = merged [ csel ] ;
922- foreach ( var dsel in dsels . Where ( dsel => ! temp . ContainsKey ( dsel ) ) )
923- merged [ csel ] . Remove ( dsel ) ;
924- }
925-
926- break ;
927- case "or" : // Ergebnis trifft auf die erste oder eine Folgeabfrage zu
928- foreach ( var csel in temp )
929- {
930- if ( ! merged . ContainsKey ( csel . Key ) )
931- merged . Add ( csel . Key , new HashSet < Guid > ( ) ) ;
932- foreach ( var dsel in csel . Value )
933- if ( ! merged [ csel . Key ] . Contains ( dsel ) )
934- merged [ csel . Key ] . Add ( dsel ) ;
935- }
931+ var dsels = merged [ csel ] ;
932+ foreach ( var dsel in dsels . Where ( dsel => ! temp . ContainsKey ( dsel ) ) )
933+ merged [ csel ] . Remove ( dsel ) ;
934+ }
935+ break ;
936+ case "or" : // Ergebnis trifft auf die erste oder eine Folgeabfrage zu
937+ foreach ( var csel in temp )
938+ {
939+ if ( ! merged . ContainsKey ( csel . Key ) )
940+ merged . Add ( csel . Key , new HashSet < Guid > ( ) ) ;
941+ foreach ( var dsel in csel . Value )
942+ if ( ! merged [ csel . Key ] . Contains ( dsel ) )
943+ merged [ csel . Key ] . Add ( dsel ) ;
944+ }
945+ break ;
946+ }
947+ }
948+ catch
949+ {
950+ if ( queryGroup . @operator != "and" )
951+ continue ;
936952
937- break ;
953+ merged . Clear ( ) ;
954+ break ;
938955 }
939956 }
940957
0 commit comments