Skip to content

Commit 3ca1e98

Browse files
committed
Fixed #1006 plus simple/corrected C# code in Filters
1 parent a08c261 commit 3ca1e98

File tree

1 file changed

+40
-10
lines changed

1 file changed

+40
-10
lines changed

FetchXmlBuilder/Converters/CSharpCodeGenerator.cs

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)