- 优化 WhereDynamicFilter 忽略 like '%%';

This commit is contained in:
2881099 2021-02-09 16:40:28 +08:00
parent 6cba1dedaf
commit 2dd722e507
2 changed files with 20 additions and 7 deletions

View File

@ -174,7 +174,7 @@ namespace base_entity
{ {
""Field"" : ""title"", ""Field"" : ""title"",
""Operator"" : ""contains"", ""Operator"" : ""contains"",
""Value"" : ""product-1111"", ""Value"" : """",
}, },
{ {
""Field"" : ""title"", ""Field"" : ""title"",

View File

@ -514,6 +514,7 @@ namespace FreeSql.Internal.CommonProvider
{ {
if (filter == null) return this as TSelect; if (filter == null) return this as TSelect;
var sb = new StringBuilder(); var sb = new StringBuilder();
if (IsIgnoreFilter(filter)) filter.Field = "";
ParseFilter(DynamicFilterLogic.And, filter, true); ParseFilter(DynamicFilterLogic.And, filter, true);
this.Where(sb.ToString()); this.Where(sb.ToString());
sb.Clear(); sb.Clear();
@ -622,12 +623,17 @@ namespace FreeSql.Internal.CommonProvider
} }
if (fi.Filters?.Any() == true) if (fi.Filters?.Any() == true)
{ {
if (string.IsNullOrEmpty(fi.Field) == false) fi.Filters = fi.Filters.Where(a => IsIgnoreFilter(a) == false).ToList(); //忽略 like '%%'
sb.Append(" AND ");
if (fi.Logic == DynamicFilterLogic.Or) sb.Append("("); if (fi.Filters.Any())
for (var x = 0; x < fi.Filters.Count; x++) {
ParseFilter(fi.Logic, fi.Filters[x], x == fi.Filters.Count - 1); if (string.IsNullOrEmpty(fi.Field) == false)
if (fi.Logic == DynamicFilterLogic.Or) sb.Append(")"); sb.Append(" AND ");
if (fi.Logic == DynamicFilterLogic.Or) sb.Append("(");
for (var x = 0; x < fi.Filters.Count; x++)
ParseFilter(fi.Logic, fi.Filters[x], x == fi.Filters.Count - 1);
if (fi.Logic == DynamicFilterLogic.Or) sb.Append(")");
}
} }
if (isend == false) if (isend == false)
@ -642,6 +648,13 @@ namespace FreeSql.Internal.CommonProvider
} }
} }
} }
bool IsIgnoreFilter(DynamicFilterInfo testFilter)
{
return string.IsNullOrEmpty(testFilter.Field) == false &&
new[] { DynamicFilterOperator.Contains, DynamicFilterOperator.StartsWith, DynamicFilterOperator.EndsWith }.Contains(testFilter.Operator) &&
string.IsNullOrEmpty(testFilter.Value?.ToString());
}
} }
public TSelect DisableGlobalFilter(params string[] name) public TSelect DisableGlobalFilter(params string[] name)