From 2dd722e507b34e246bfa7da1c18c29e80b9c64e8 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Tue, 9 Feb 2021 16:40:28 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20WhereDynamicFilter=20?= =?UTF-8?q?=E5=BF=BD=E7=95=A5=20like=20'%%'=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Examples/base_entity/Program.cs | 2 +- .../SelectProvider/Select0Provider.cs | 25 ++++++++++++++----- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index 5e73a594..bacf2043 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -174,7 +174,7 @@ namespace base_entity { ""Field"" : ""title"", ""Operator"" : ""contains"", - ""Value"" : ""product-1111"", + ""Value"" : """", }, { ""Field"" : ""title"", diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs index 4218a323..c6d26038 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs @@ -514,6 +514,7 @@ namespace FreeSql.Internal.CommonProvider { if (filter == null) return this as TSelect; var sb = new StringBuilder(); + if (IsIgnoreFilter(filter)) filter.Field = ""; ParseFilter(DynamicFilterLogic.And, filter, true); this.Where(sb.ToString()); sb.Clear(); @@ -622,12 +623,17 @@ namespace FreeSql.Internal.CommonProvider } if (fi.Filters?.Any() == true) { - if (string.IsNullOrEmpty(fi.Field) == false) - 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(")"); + fi.Filters = fi.Filters.Where(a => IsIgnoreFilter(a) == false).ToList(); //忽略 like '%%' + + if (fi.Filters.Any()) + { + if (string.IsNullOrEmpty(fi.Field) == false) + 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) @@ -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)