From ac1127ad60c8615f186beb8135378e1a6ea0f5bd Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Thu, 29 May 2025 20:49:05 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20Lambda=20.Contains=20?= =?UTF-8?q?=E9=80=9A=E9=85=8D=E7=AC=A6=E8=A7=A3=E6=9E=90=E4=B8=BA=E9=9D=9E?= =?UTF-8?q?=20Like=20=E9=97=AE=E9=A2=98=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Duckdb/DuckdbAdo/DuckdbAdoTest.cs | 16 +++++++++++++++- .../FreeSql.Tests.Provider.Duckdb.csproj | 6 +++--- .../MySql/CustomMySqlExpression.cs | 2 +- .../Oracle/CustomOracleExpression.cs | 2 +- .../PostgreSQL/CustomPostgreSQLExpression.cs | 2 +- .../SqlServer/CustomSqlServerExpression.cs | 2 +- .../FreeSql.Provider.Dameng/DamengExpression.cs | 2 +- .../FreeSql.Provider.Duckdb/DuckdbExpression.cs | 2 +- .../FirebirdExpression.cs | 2 +- .../FreeSql.Provider.GBase/GBaseExpression.cs | 2 +- .../KingbaseESExpression.cs | 2 +- .../MsAccessExpression.cs | 2 +- .../FreeSql.Provider.MySql/MySqlExpression.cs | 2 +- .../MySql/OdbcMySqlExpression.cs | 2 +- .../Oracle/OdbcOracleExpression.cs | 2 +- .../PostgreSQL/OdbcPostgreSQLExpression.cs | 2 +- .../SqlServer/OdbcSqlServerExpression.cs | 2 +- .../FreeSql.Provider.Oracle/OracleExpression.cs | 2 +- .../PostgreSQLExpression.cs | 2 +- .../QuestDbExpression.cs | 2 +- .../ShenTongExpression.cs | 2 +- .../SqlServerExpression.cs | 2 +- .../FreeSql.Provider.Sqlite/SqliteExpression.cs | 2 +- .../TDengineExpression.cs | 2 +- .../FreeSql.Provider.Xugu/XuguExpression.cs | 2 +- 25 files changed, 41 insertions(+), 27 deletions(-) diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Duckdb/Duckdb/DuckdbAdo/DuckdbAdoTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Duckdb/Duckdb/DuckdbAdo/DuckdbAdoTest.cs index 8e180dcad..b153fc44d 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Duckdb/Duckdb/DuckdbAdo/DuckdbAdoTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Duckdb/Duckdb/DuckdbAdo/DuckdbAdoTest.cs @@ -1,5 +1,7 @@ using FreeSql.DataAnnotations; using System; +using System.Diagnostics; +using System.Threading; using Xunit; namespace FreeSql.Tests.Duckdb @@ -20,9 +22,21 @@ namespace FreeSql.Tests.Duckdb Assert.True(fsql.Ado.ExecuteConnectTest()); } [Fact] - public void ExecuteReader() + public void ExecuteDataTable() { + var dataTable = fsql.Ado.ExecuteDataTable("select * from tbiou04"); + using (var duck = new FreeSql.FreeSqlBuilder() + .UseConnectionString(FreeSql.DataType.DuckDB, "DataSource=D:\\WeChat Files\\WeChat Files\\q2881099\\FileStorage\\File\\2025-05") + .UseAutoSyncStructure(true) + .UseMonitorCommand( + cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText) //监听SQL命令对象,在执行前 + , (cmd, traceLog) => Console.WriteLine(traceLog) + ) + .Build()) + { + var dataTable2 = fsql.Ado.ExecuteDataTable("select * from db_db"); + } } [Fact] public void ExecuteArray() diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Duckdb/FreeSql.Tests.Provider.Duckdb.csproj b/FreeSql.Tests/FreeSql.Tests.Provider.Duckdb/FreeSql.Tests.Provider.Duckdb.csproj index 1a413618f..62347c113 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Duckdb/FreeSql.Tests.Provider.Duckdb.csproj +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Duckdb/FreeSql.Tests.Provider.Duckdb.csproj @@ -11,9 +11,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlExpression.cs b/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlExpression.cs index 783b7464c..feb2e9802 100644 --- a/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlExpression.cs +++ b/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlExpression.cs @@ -285,7 +285,7 @@ namespace FreeSql.Custom.MySql var leftLike = exp.Object.NodeType == ExpressionType.MemberAccess ? left : $"({left})"; var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"{leftLike} IS NULL"; - if (args0Value.Contains("%")) + if (new[] { '%', '_', '[', ']', '*' }.Any(wildcard => args0Value.Contains(wildcard))) { if (exp.Method.Name == "StartsWith") return $"locate({args0Value}, {left}) = 1"; if (exp.Method.Name == "EndsWith") return $"locate({args0Value}, {left}) = char_length({left})-char_length({args0Value})+1"; diff --git a/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleExpression.cs b/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleExpression.cs index 4a473cd1c..2f08eadc4 100644 --- a/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleExpression.cs +++ b/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleExpression.cs @@ -288,7 +288,7 @@ namespace FreeSql.Custom.Oracle var leftLike = exp.Object.NodeType == ExpressionType.MemberAccess ? left : $"({left})"; var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"{leftLike} IS NULL"; - if (args0Value.Contains("%")) + if (new[] { '%', '_', '[', ']', '*' }.Any(wildcard => args0Value.Contains(wildcard))) { if (exp.Method.Name == "StartsWith") return $"instr({left}, {args0Value}, 1, 1) = 1"; if (exp.Method.Name == "EndsWith") return $"instr({left}, {args0Value}, 1, 1) = length({left})-length({args0Value})+1"; diff --git a/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLExpression.cs b/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLExpression.cs index 5453fbf04..22144ec4b 100644 --- a/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLExpression.cs +++ b/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLExpression.cs @@ -377,7 +377,7 @@ namespace FreeSql.Custom.PostgreSQL var leftLike = exp.Object.NodeType == ExpressionType.MemberAccess ? left : $"({left})"; var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"{leftLike} IS NULL"; - if (args0Value.Contains("%")) + if (new[] { '%', '_', '[', ']', '*' }.Any(wildcard => args0Value.Contains(wildcard))) { if (exp.Method.Name == "StartsWith") return $"strpos({left}, {args0Value}) = 1"; if (exp.Method.Name == "EndsWith") return $"strpos({left}, {args0Value}) = char_length({left})-char_length({args0Value})+1"; diff --git a/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerExpression.cs b/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerExpression.cs index ab1318707..d5d0f3602 100644 --- a/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerExpression.cs +++ b/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerExpression.cs @@ -308,7 +308,7 @@ namespace FreeSql.Custom.SqlServer var leftLike = exp.Object.NodeType == ExpressionType.MemberAccess ? left : $"({left})"; var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"{leftLike} IS NULL"; - if (args0Value.Contains("%")) + if (new[] { '%', '_', '[', ']' }.Any(wildcard => args0Value.Contains(wildcard))) { if (exp.Method.Name == "StartsWith") return $"charindex({args0Value}, {left}) = 1"; if (exp.Method.Name == "EndsWith") return $"charindex({args0Value}, {left}) = len({left})-len({args0Value})+1"; diff --git a/Providers/FreeSql.Provider.Dameng/DamengExpression.cs b/Providers/FreeSql.Provider.Dameng/DamengExpression.cs index 90d513cba..b68be38cc 100644 --- a/Providers/FreeSql.Provider.Dameng/DamengExpression.cs +++ b/Providers/FreeSql.Provider.Dameng/DamengExpression.cs @@ -288,7 +288,7 @@ namespace FreeSql.Dameng var leftLike = exp.Object.NodeType == ExpressionType.MemberAccess ? left : $"({left})"; var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"{leftLike} IS NULL"; - if (args0Value.Contains("%")) + if (new[] { '%', '_', '[', ']', '*' }.Any(wildcard => args0Value.Contains(wildcard))) { if (exp.Method.Name == "StartsWith") return $"instr({left}, {args0Value}, 1, 1) = 1"; if (exp.Method.Name == "EndsWith") return $"instr({left}, {args0Value}, 1, 1) = length({left})-length({args0Value})+1"; diff --git a/Providers/FreeSql.Provider.Duckdb/DuckdbExpression.cs b/Providers/FreeSql.Provider.Duckdb/DuckdbExpression.cs index 07a8bc34c..9e279e87d 100644 --- a/Providers/FreeSql.Provider.Duckdb/DuckdbExpression.cs +++ b/Providers/FreeSql.Provider.Duckdb/DuckdbExpression.cs @@ -354,7 +354,7 @@ namespace FreeSql.Duckdb var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"{leftLike} IS NULL"; if (exp.Method.Name == "StartsWith") return $"{left} ^@ ({args0Value})"; - if (args0Value.Contains("%")) + if (new[] { '%', '_', '[', ']', '*' }.Any(wildcard => args0Value.Contains(wildcard))) { if (exp.Method.Name == "EndsWith") return $"strpos({left}, {args0Value}) = length({left})-length({args0Value})+1"; return $"strpos({left}, {args0Value}) > 0"; diff --git a/Providers/FreeSql.Provider.Firebird/FirebirdExpression.cs b/Providers/FreeSql.Provider.Firebird/FirebirdExpression.cs index 4c72b727b..80fec7d3f 100644 --- a/Providers/FreeSql.Provider.Firebird/FirebirdExpression.cs +++ b/Providers/FreeSql.Provider.Firebird/FirebirdExpression.cs @@ -275,7 +275,7 @@ namespace FreeSql.Firebird var leftLike = exp.Object.NodeType == ExpressionType.MemberAccess ? left : $"({left})"; var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"{leftLike} IS NULL"; - if (args0Value.Contains("%")) + if (new[] { '%', '_', '[', ']', '*' }.Any(wildcard => args0Value.Contains(wildcard))) { if (exp.Method.Name == "StartsWith") return $"position({args0Value}, {left}) = 1"; if (exp.Method.Name == "EndsWith") return $"position({args0Value}, {left}) = char_length({left})-char_length({args0Value})+1"; diff --git a/Providers/FreeSql.Provider.GBase/GBaseExpression.cs b/Providers/FreeSql.Provider.GBase/GBaseExpression.cs index 477fbff33..55ffa3544 100644 --- a/Providers/FreeSql.Provider.GBase/GBaseExpression.cs +++ b/Providers/FreeSql.Provider.GBase/GBaseExpression.cs @@ -275,7 +275,7 @@ namespace FreeSql.GBase var leftLike = exp.Object.NodeType == ExpressionType.MemberAccess ? left : $"({left})"; var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"{leftLike} IS NULL"; - if (args0Value.Contains("%")) + if (new[] { '%', '_', '[', ']', '*' }.Any(wildcard => args0Value.Contains(wildcard))) { if (exp.Method.Name == "StartsWith") return $"instr({args0Value}, {left}) = 1"; if (exp.Method.Name == "EndsWith") return $"instr({args0Value}, {left}) = char_length({left})-char_length({args0Value})+1"; diff --git a/Providers/FreeSql.Provider.KingbaseES/KingbaseESExpression.cs b/Providers/FreeSql.Provider.KingbaseES/KingbaseESExpression.cs index f67b7559f..9a19c6dc1 100644 --- a/Providers/FreeSql.Provider.KingbaseES/KingbaseESExpression.cs +++ b/Providers/FreeSql.Provider.KingbaseES/KingbaseESExpression.cs @@ -408,7 +408,7 @@ namespace FreeSql.KingbaseES var leftLike = exp.Object.NodeType == ExpressionType.MemberAccess ? left : $"({left})"; var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"{leftLike} IS NULL"; - if (args0Value.Contains("%")) + if (new[] { '%', '_', '[', ']', '*' }.Any(wildcard => args0Value.Contains(wildcard))) { if (exp.Method.Name == "StartsWith") return $"strpos({left}, {args0Value}) = 1"; if (exp.Method.Name == "EndsWith") return $"strpos({left}, {args0Value}) = char_length({left})-char_length({args0Value})+1"; diff --git a/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs b/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs index 99cb023c0..c13775ad4 100644 --- a/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs +++ b/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs @@ -249,7 +249,7 @@ namespace FreeSql.MsAccess var leftLike = exp.Object.NodeType == ExpressionType.MemberAccess ? left : $"({left})"; var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"{leftLike} IS NULL"; - if (args0Value.Contains("%")) + if (new[] { '%', '_', '[', ']', '*' }.Any(wildcard => args0Value.Contains(wildcard))) { if (exp.Method.Name == "StartsWith") return $"instr({left}, {args0Value}) = 1"; if (exp.Method.Name == "EndsWith") return $"instr({left}, {args0Value}) = len({left})-len({args0Value})+1"; diff --git a/Providers/FreeSql.Provider.MySql/MySqlExpression.cs b/Providers/FreeSql.Provider.MySql/MySqlExpression.cs index 368f9ef94..8867393b2 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlExpression.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlExpression.cs @@ -287,7 +287,7 @@ namespace FreeSql.MySql var leftLike = exp.Object.NodeType == ExpressionType.MemberAccess ? left : $"({left})"; var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"{leftLike} IS NULL"; - if (args0Value.Contains("%")) + if (new[] { '%', '_', '[', ']', '*' }.Any(wildcard => args0Value.Contains(wildcard))) { if (exp.Method.Name == "StartsWith") return $"locate({args0Value}, {left}) = 1"; if (exp.Method.Name == "EndsWith") return $"locate({args0Value}, {left}) = char_length({left})-char_length({args0Value})+1"; diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs index 789a56c24..b32adbf76 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs @@ -285,7 +285,7 @@ namespace FreeSql.Odbc.MySql var leftLike = exp.Object.NodeType == ExpressionType.MemberAccess ? left : $"({left})"; var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"{leftLike} IS NULL"; - if (args0Value.Contains("%")) + if (new[] { '%', '_', '[', ']', '*' }.Any(wildcard => args0Value.Contains(wildcard))) { if (exp.Method.Name == "StartsWith") return $"locate({args0Value}, {left}) = 1"; if (exp.Method.Name == "EndsWith") return $"locate({args0Value}, {left}) = char_length({left})-char_length({args0Value})+1"; diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs index 1a7c87043..d22d22b92 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs @@ -288,7 +288,7 @@ namespace FreeSql.Odbc.Oracle var leftLike = exp.Object.NodeType == ExpressionType.MemberAccess ? left : $"({left})"; var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"{leftLike} IS NULL"; - if (args0Value.Contains("%")) + if (new[] { '%', '_', '[', ']', '*' }.Any(wildcard => args0Value.Contains(wildcard))) { if (exp.Method.Name == "StartsWith") return $"instr({left}, {args0Value}, 1, 1) = 1"; if (exp.Method.Name == "EndsWith") return $"instr({left}, {args0Value}, 1, 1) = length({left})-length({args0Value})+1"; diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs index 10b5ccf78..33b4d8098 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs @@ -377,7 +377,7 @@ namespace FreeSql.Odbc.PostgreSQL var leftLike = exp.Object.NodeType == ExpressionType.MemberAccess ? left : $"({left})"; var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"{leftLike} IS NULL"; - if (args0Value.Contains("%")) + if (new[] { '%', '_', '[', ']', '*' }.Any(wildcard => args0Value.Contains(wildcard))) { if (exp.Method.Name == "StartsWith") return $"strpos({left}, {args0Value}) = 1"; if (exp.Method.Name == "EndsWith") return $"strpos({left}, {args0Value}) = char_length({left})-char_length({args0Value})+1"; diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs index 14a19833e..b67e788b7 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs @@ -308,7 +308,7 @@ namespace FreeSql.Odbc.SqlServer var leftLike = exp.Object.NodeType == ExpressionType.MemberAccess ? left : $"({left})"; var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"{leftLike} IS NULL"; - if (args0Value.Contains("%")) + if (new[] { '%', '_', '[', ']', '*' }.Any(wildcard => args0Value.Contains(wildcard))) { if (exp.Method.Name == "StartsWith") return $"charindex({args0Value}, {left}) = 1"; if (exp.Method.Name == "EndsWith") return $"charindex({args0Value}, {left}) = len({left})-len({args0Value})+1"; diff --git a/Providers/FreeSql.Provider.Oracle/OracleExpression.cs b/Providers/FreeSql.Provider.Oracle/OracleExpression.cs index 664e74099..870ca6655 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleExpression.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleExpression.cs @@ -288,7 +288,7 @@ namespace FreeSql.Oracle var leftLike = exp.Object.NodeType == ExpressionType.MemberAccess ? left : $"({left})"; var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"{leftLike} IS NULL"; - if (args0Value.Contains("%")) + if (new[] { '%', '_', '[', ']', '*' }.Any(wildcard => args0Value.Contains(wildcard))) { if (exp.Method.Name == "StartsWith") return $"instr({left}, {args0Value}, 1, 1) = 1"; if (exp.Method.Name == "EndsWith") return $"instr({left}, {args0Value}, 1, 1) = length({left})-length({args0Value})+1"; diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs index 184b5a31e..a01097e94 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs @@ -408,7 +408,7 @@ namespace FreeSql.PostgreSQL var leftLike = exp.Object.NodeType == ExpressionType.MemberAccess ? left : $"({left})"; var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"{leftLike} IS NULL"; - if (args0Value.Contains("%")) + if (new[] { '%', '_', '[', ']', '*' }.Any(wildcard => args0Value.Contains(wildcard))) { if (exp.Method.Name == "StartsWith") return $"strpos({left}, {args0Value}) = 1"; if (exp.Method.Name == "EndsWith") return $"strpos({left}, {args0Value}) = char_length({left})-char_length({args0Value})+1"; diff --git a/Providers/FreeSql.Provider.QuestDb/QuestDbExpression.cs b/Providers/FreeSql.Provider.QuestDb/QuestDbExpression.cs index 7a0851f62..9383009fb 100644 --- a/Providers/FreeSql.Provider.QuestDb/QuestDbExpression.cs +++ b/Providers/FreeSql.Provider.QuestDb/QuestDbExpression.cs @@ -311,7 +311,7 @@ namespace FreeSql.QuestDb var leftLike = exp.Object.NodeType == ExpressionType.MemberAccess ? left : $"({left})"; var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"{leftLike} IS NULL"; - if (args0Value.Contains("%")) + if (new[] { '%', '_', '[', ']', '*' }.Any(wildcard => args0Value.Contains(wildcard))) { if (exp.Method.Name == "StartsWith") return $"strpos({left}, {args0Value}) = 1"; if (exp.Method.Name == "EndsWith") return $"strpos({left}, {args0Value}) = length({left})-length({args0Value})+1"; diff --git a/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs b/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs index 07823f95d..4abaa4d24 100644 --- a/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs +++ b/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs @@ -332,7 +332,7 @@ namespace FreeSql.ShenTong var leftLike = exp.Object.NodeType == ExpressionType.MemberAccess ? left : $"({left})"; var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"{leftLike} IS NULL"; - if (args0Value.Contains("%")) + if (new[] { '%', '_', '[', ']', '*' }.Any(wildcard => args0Value.Contains(wildcard))) { if (exp.Method.Name == "StartsWith") return $"strpos({left}, {args0Value}) = 1"; if (exp.Method.Name == "EndsWith") return $"strpos({left}, {args0Value}) = char_length({left})-char_length({args0Value})+1"; diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs index 4afc463fa..9a00861e1 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs @@ -307,7 +307,7 @@ namespace FreeSql.SqlServer var leftLike = exp.Object.NodeType == ExpressionType.MemberAccess ? left : $"({left})"; var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"{leftLike} IS NULL"; - if (args0Value.Contains("%")) + if (new[] { '%', '_', '[', ']' }.Any(wildcard => args0Value.Contains(wildcard))) { if (exp.Method.Name == "StartsWith") return $"charindex({args0Value}, {left}) = 1"; if (exp.Method.Name == "EndsWith") return $"charindex({args0Value}, {left}) = len({left})-len({args0Value})+1"; diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs b/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs index b864b33ff..2e6db9245 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs @@ -284,7 +284,7 @@ namespace FreeSql.Sqlite var leftLike = exp.Object.NodeType == ExpressionType.MemberAccess ? left : $"({left})"; var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"{leftLike} IS NULL"; - if (args0Value.Contains("%")) + if (new[] { '%', '_', '[', ']', '*' }.Any(wildcard => args0Value.Contains(wildcard))) { if (exp.Method.Name == "StartsWith") return $"instr({left}, {args0Value}) = 1"; if (exp.Method.Name == "EndsWith") return $"instr({left}, {args0Value}) = length({left})-length({args0Value})+1"; diff --git a/Providers/FreeSql.Provider.TDengine/TDengineExpression.cs b/Providers/FreeSql.Provider.TDengine/TDengineExpression.cs index 4207dd431..e9aa38ca1 100644 --- a/Providers/FreeSql.Provider.TDengine/TDengineExpression.cs +++ b/Providers/FreeSql.Provider.TDengine/TDengineExpression.cs @@ -354,7 +354,7 @@ namespace FreeSql.TDengine var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"{leftLike} IS NULL"; if (exp.Method.Name == "StartsWith") return $"{left} ^@ ({args0Value})"; - if (args0Value.Contains("%")) + if (new[] { '%', '_', '[', ']', '*' }.Any(wildcard => args0Value.Contains(wildcard))) { if (exp.Method.Name == "EndsWith") return $"strpos({left}, {args0Value}) = length({left})-length({args0Value})+1"; return $"strpos({left}, {args0Value}) > 0"; diff --git a/Providers/FreeSql.Provider.Xugu/XuguExpression.cs b/Providers/FreeSql.Provider.Xugu/XuguExpression.cs index dfc1b58ea..aed41e397 100644 --- a/Providers/FreeSql.Provider.Xugu/XuguExpression.cs +++ b/Providers/FreeSql.Provider.Xugu/XuguExpression.cs @@ -333,7 +333,7 @@ namespace FreeSql.Xugu var leftLike = exp.Object.NodeType == ExpressionType.MemberAccess ? left : $"({left})"; var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"{leftLike} IS NULL"; - if (args0Value.Contains("%")) + if (new[] { '%', '_', '[', ']', '*' }.Any(wildcard => args0Value.Contains(wildcard))) { if (exp.Method.Name == "StartsWith") return $"strpos({left}, {args0Value}) = 1"; if (exp.Method.Name == "EndsWith") return $"strpos({left}, {args0Value}) = char_length({left})-char_length({args0Value})+1";