@@ -229,13 +229,21 @@ private string GetFilterLbL(string entity, FilterExpression filter, string owner
229229 {
230230 return string . Empty ;
231231 }
232+ if ( filter . Filters . Count == 1 && ! filter . Conditions . Any ( ) )
233+ {
234+ return GetFilterLbL ( entity , filter . Filters . First ( ) , ownerName , ownerType , several ) ;
235+ }
232236 if ( settings . QExStyle == QExStyleEnum . QueryByAttribute && ownerType != OwnersType . Root )
233237 {
234238 throw new Exception ( "Only root filters are supported for QueryByAttribute. Use QueryExpression if you need it." ) ;
235239 }
236240 var code = new StringBuilder ( ) ;
237241 filter . FilterHint = $ "{ ownerName } .{ ( ownerType == OwnersType . Root ? "Criteria" : ownerType == OwnersType . Link ? "LinkCriteria" : "Filters" ) } ";
238242 var rootfilters = filter . FilterHint . EndsWith ( "Criteria" ) || filter . FilterHint . EndsWith ( "Criteria.Filters" ) ;
243+ if ( ownerType == OwnersType . Root && filter . FilterOperator == LogicalOperator . Or )
244+ {
245+ code . AppendLine ( $ "{ ownerName } .Criteria.FilterOperator = LogicalOperator.Or;") ;
246+ }
239247 if ( ownerType == OwnersType . Sub || ( ownerType == OwnersType . Link && ( filter . FilterOperator == LogicalOperator . Or || ! filter . Conditions . Any ( ) ) ) )
240248 {
241249 filter . FilterHint = GetVarName ( $ "{ ownerName } .{ ( filter . FilterOperator == LogicalOperator . Or ? "Or" : "And" ) } ". Replace ( ".Criteria" , "" ) . Replace ( ".LinkCriteria" , "" ) , several ) ;
@@ -245,7 +253,16 @@ private string GetFilterLbL(string entity, FilterExpression filter, string owner
245253 code . AppendLine ( $ "//{ CRLF } // Add filter { filter . FilterHint } to { ownerName } ") ;
246254 }
247255 code . AppendLine ( $ "var { filter . FilterHint } = new FilterExpression({ ( filter . FilterOperator == LogicalOperator . Or ? "LogicalOperator.Or" : "" ) } );") ;
248- code . AppendLine ( $ "{ ownerName } .AddFilter({ filter . FilterHint } );") ;
256+ switch ( ownerType )
257+ {
258+ case OwnersType . Link :
259+ code . AppendLine ( $ "{ ownerName } .LinkCriteria = { filter . FilterHint } ;") ;
260+ break ;
261+
262+ default :
263+ code . AppendLine ( $ "{ ownerName } .AddFilter({ filter . FilterHint } );") ;
264+ break ;
265+ }
249266 }
250267 var filtercode = new List < string >
251268 {
@@ -322,7 +339,7 @@ private string GetLinkEntitiesLbL(DataCollection<LinkEntity> linkEntities, strin
322339 foreach ( var link in linkEntities )
323340 {
324341 var linkcode = string . Empty ;
325- var linkname = GetVarName ( string . IsNullOrEmpty ( link . EntityAlias ) || link . LinkToEntityName == link . EntityAlias ? LineStart + "_" + link . LinkToEntityName : link . EntityAlias ) ;
342+ var linkname = GetVarName ( string . IsNullOrEmpty ( link . EntityAlias ) || link . LinkToEntityName == link . EntityAlias ? LineStart + "_" + link . LinkToEntityName : link . EntityAlias ) ;
326343 if ( settings . IncludeComments )
327344 {
328345 linkcode += $ "//{ CRLF } // Add link-entity { linkname } { CRLF } ";
@@ -485,13 +502,14 @@ private string GetFiltersOI(string entity, FilterExpression filter, string owner
485502 var filterscode = "" ;
486503 var filters = filter . Filters . Where ( f => f . Conditions . Any ( ) || f . Filters . Any ( ) ) ;
487504 var filtercodes = new List < string > ( ) ;
488- var rootfilters = settings . QExFlavor == QExFlavorEnum . EarlyBound && ( filter . FilterHint . EndsWith ( "Criteria" ) || filter . FilterHint . EndsWith ( "Criteria.Filters" ) ) ;
505+ var rootfilters = filter . FilterHint . EndsWith ( "Criteria" ) || filter . FilterHint . EndsWith ( "Criteria.Filters" ) ;
506+ var dlabrootfilters = settings . QExFlavor == QExFlavorEnum . EarlyBound && rootfilters ;
489507 var comment = $ "{ Indent ( indentslevel ) } // Add { filters . Count ( ) } filters to { entity } { CRLF } ";
490508 // Before filters
491509 switch ( settings . QExStyle )
492510 {
493511 case QExStyleEnum . QueryExpressionFactory :
494- if ( ! rootfilters )
512+ if ( ! dlabrootfilters )
495513 {
496514 filterscode += $ "{ Indent ( indentslevel ) } Filters ={ CRLF } { Indent ( indentslevel ++ ) } {{{CRLF}";
497515 }
@@ -515,7 +533,7 @@ private string GetFiltersOI(string entity, FilterExpression filter, string owner
515533 switch ( settings . QExStyle )
516534 {
517535 case QExStyleEnum . QueryExpressionFactory :
518- if ( ! rootfilters )
536+ if ( ! dlabrootfilters )
519537 {
520538 filterscode += $ "{ CRLF } { Indent ( -- indentslevel ) } }}";
521539 }
@@ -537,6 +555,10 @@ private string GetFilterOI(string entity, FilterExpression filter, string ownerN
537555 {
538556 return string . Empty ;
539557 }
558+ if ( filter . Filters . Count == 1 && ! filter . Conditions . Any ( ) )
559+ {
560+ return GetFilterOI ( entity , filter . Filters . First ( ) , ownerName , ownerType , indentslevel , namestree ) ;
561+ }
540562 if ( settings . QExStyle == QExStyleEnum . QueryByAttribute && ownerType != OwnersType . Root )
541563 {
542564 throw new Exception ( "Only root filters are supported for QueryByAttribute. Use QueryExpression if you need it." ) ;
@@ -547,12 +569,12 @@ private string GetFilterOI(string entity, FilterExpression filter, string ownerN
547569 var commentconds = filter . Conditions . Count > 0 ? $ " { filter . Conditions . Count } conditions" : "" ;
548570 var commentfilts = filter . Filters . Count > 0 ? $ " { filter . Filters . Count } filters" : "" ;
549571 var comment = $ "{ Indent ( indentslevel ) } // Add filter to { entity } with{ commentconds } { commentfilts } { CRLF } ";
550- var dlabrootfilters = /*settings.QExFlavor == QExFlavorEnum.EarlyBound &&*/ ( filter . FilterHint . EndsWith ( "Criteria" ) || filter . FilterHint . EndsWith ( "Criteria.Filters" ) ) ;
572+ var rootfilters = filter . FilterHint . EndsWith ( "Criteria" ) || filter . FilterHint . EndsWith ( "Criteria.Filters" ) ;
551573 var addfilterexpression = true ;
552574 switch ( settings . QExStyle )
553575 {
554576 case QExStyleEnum . QueryExpressionFactory :
555- if ( ! dlabrootfilters || filter . FilterOperator == LogicalOperator . Or || ! filter . Conditions . Any ( ) )
577+ if ( ! rootfilters || filter . FilterOperator == LogicalOperator . Or || ! filter . Conditions . Any ( ) )
556578 {
557579 code . Append ( $ "{ Indent ( indentslevel ) } new FilterExpression({ ( filter . FilterOperator == LogicalOperator . Or ? "LogicalOperator.Or" : "" ) } ){ CRLF } { Indent ( indentslevel ++ ) } {{{CRLF}") ;
558580 }
@@ -591,14 +613,22 @@ private string GetFilterOI(string entity, FilterExpression filter, string ownerN
591613 break ;
592614
593615 default :
594- if ( ownerType == OwnersType . Sub || ( ownerType == OwnersType . Link && ( filter . FilterOperator == LogicalOperator . Or || ! filter . Conditions . Any ( ) ) ) )
616+ if ( ownerType == OwnersType . Sub )
595617 {
596- code . Append ( $ "{ Indent ( indentslevel ) } new FilterExpression({ ( filter . FilterOperator == LogicalOperator . Or ? "LogicalOperator.Or" : "" ) } ){ CRLF } { Indent ( indentslevel ++ ) } {{{CRLF}") ;
618+ code . Append ( $ "{ Indent ( indentslevel ) } new FilterExpression{ CRLF } { Indent ( indentslevel ++ ) } {{{CRLF}") ;
619+ }
620+ else if ( ownerType == OwnersType . Link && ( filter . FilterOperator == LogicalOperator . Or || ! filter . Conditions . Any ( ) ) )
621+ {
622+ code . Append ( $ "{ Indent ( indentslevel ) } LinkCriteria ={ CRLF } { Indent ( indentslevel ++ ) } {{{CRLF}") ;
597623 }
598624 else
599625 {
600626 code . Append ( $ "{ Indent ( indentslevel ) } { filterObjectName } ={ CRLF } { Indent ( indentslevel ++ ) } {{{CRLF}") ;
601627 }
628+ if ( filter . FilterOperator == LogicalOperator . Or )
629+ {
630+ code . Append ( $ "{ Indent ( indentslevel ) } FilterOperator = LogicalOperator.Or,{ CRLF } ") ;
631+ }
602632 break ;
603633 }
604634 if ( settings . IncludeComments && ! string . IsNullOrWhiteSpace ( code . ToString ( ) ) )
@@ -1435,4 +1465,4 @@ internal static string CapitSchemaName(this AttributeMetadata attribute, QExFlav
14351465 return attribute . SchemaName ;
14361466 }
14371467 }
1438- }
1468+ }
0 commit comments