diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlConnectorExpression/OtherTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlConnectorExpression/OtherTest.cs index 37b81c4d..19ab9e10 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlConnectorExpression/OtherTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlConnectorExpression/OtherTest.cs @@ -106,6 +106,11 @@ namespace FreeSql.Tests.MySqlConnectorExpression var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList(); var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList(); var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList(); + + var inarray2n = Enumerable.Range(1, 3333).ToArray(); + var sql1111111 = select.Where(a => inarray2n.Contains(a.testFieldInt)).ToList(); + var sql1122222 = select.Where(a => inarray2n.Contains(a.testFieldInt) == false).ToList(); + var sql1133333 = select.Where(a => !inarray2n.Contains(a.testFieldInt)).ToList(); } [Table(Name = "tb_alltype")] diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/OdbcExpression/OtherTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/OdbcExpression/OtherTest.cs index fc29b831..cf22c6f2 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/OdbcExpression/OtherTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/OdbcExpression/OtherTest.cs @@ -72,6 +72,11 @@ namespace FreeSql.Tests.Odbc.DefaultExpression var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList(); var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList(); var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList(); + + var inarray2n = Enumerable.Range(1, 3333).ToArray(); + var sql1111111 = select.Where(a => inarray2n.Contains(a.testFieldInt)).ToList(); + var sql1122222 = select.Where(a => inarray2n.Contains(a.testFieldInt) == false).ToList(); + var sql1133333 = select.Where(a => !inarray2n.Contains(a.testFieldInt)).ToList(); } [Table(Name = "tb_alltype")] diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlExpression/OtherTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlExpression/OtherTest.cs index 794f9e31..3c31f047 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlExpression/OtherTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlExpression/OtherTest.cs @@ -105,7 +105,12 @@ namespace FreeSql.Tests.Odbc.MySqlExpression var inarray2 = new List() { 1, 2, 3 }; var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList(); var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList(); - var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList(); + var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList(); + + var inarray2n = Enumerable.Range(1, 3333).ToArray(); + var sql1111111 = select.Where(a => inarray2n.Contains(a.testFieldInt)).ToList(); + var sql1122222 = select.Where(a => inarray2n.Contains(a.testFieldInt) == false).ToList(); + var sql1133333 = select.Where(a => !inarray2n.Contains(a.testFieldInt)).ToList(); } [Table(Name = "tb_alltype")] diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleExpression/OtherTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleExpression/OtherTest.cs index a3a42d06..dcc2eccf 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleExpression/OtherTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleExpression/OtherTest.cs @@ -101,6 +101,11 @@ namespace FreeSql.Tests.Odbc.OracleExpression var sql111111 = select.Where(a => inarray.Contains(a.Int)).ToList(); //var sql112222 = select.Where(a => inarray.Contains(a.Int) == false).ToList(); var sql113333 = select.Where(a => !inarray.Contains(a.Int)).ToList(); + + var inarray2n = Enumerable.Range(1, 3333).ToArray(); + var sql1111111 = select.Where(a => inarray2n.Contains(a.Int)).ToList(); + var sql1122222 = select.Where(a => inarray2n.Contains(a.Int) == false).ToList(); + var sql1133333 = select.Where(a => !inarray2n.Contains(a.Int)).ToList(); } [Table(Name = "tb_alltype")] diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLExpression/OtherTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLExpression/OtherTest.cs index 4b9e66f8..f0062476 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLExpression/OtherTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLExpression/OtherTest.cs @@ -107,7 +107,12 @@ namespace FreeSql.Tests.Odbc.PostgreSQLExpression var inarray2 = new List() { 1, 2, 3 }; var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList(); var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList(); - var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList(); + var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList(); + + var inarray2n = Enumerable.Range(1, 3333).ToArray(); + var sql1111111 = select.Where(a => inarray2n.Contains(a.testFieldInt)).ToList(); + var sql1122222 = select.Where(a => inarray2n.Contains(a.testFieldInt) == false).ToList(); + var sql1133333 = select.Where(a => !inarray2n.Contains(a.testFieldInt)).ToList(); } diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerExpression/OtherTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerExpression/OtherTest.cs index 63646aa8..7d0167f1 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerExpression/OtherTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerExpression/OtherTest.cs @@ -97,6 +97,77 @@ namespace FreeSql.Tests.Odbc.SqlServerExpression var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList(); var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList(); var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList(); + + var inarray2n = Enumerable.Range(1, 3333).ToArray(); + var sql1111111 = select.Where(a => inarray2n.Contains(a.testFieldInt)).ToList(); + var sql1122222 = select.Where(a => inarray2n.Contains(a.testFieldInt) == false).ToList(); + var sql1133333 = select.Where(a => !inarray2n.Contains(a.testFieldInt)).ToList(); + + //nvarchar + IEnumerable stringlinqlist = new List(new[] { "a1", "a2", "a3" }); + var ntestlinq = select.Where(a => stringlinqlist.Contains(a.testFieldString)).ToList(); + + //in not in + var nsql111 = select.Where(a => new[] { "a1", "a2", "a3" }.Contains(a.testFieldString)).ToList(); + var nsql112 = select.Where(a => new[] { "a1", "a2", "a3" }.Contains(a.testFieldString) == false).ToList(); + var nsql113 = select.Where(a => !new[] { "a1", "a2", "a3" }.Contains(a.testFieldString)).ToList(); + + var ninarray = new[] { "a1", "a2", "a3" }; + var nsql1111 = select.Where(a => ninarray.Contains(a.testFieldString)).ToList(); + var nsql1122 = select.Where(a => ninarray.Contains(a.testFieldString) == false).ToList(); + var nsql1133 = select.Where(a => !ninarray.Contains(a.testFieldString)).ToList(); + + //in not in + var nsql11111 = select.Where(a => new List() { "a1", "a2", "a3" }.Contains(a.testFieldString)).ToList(); + var nsql11222 = select.Where(a => new List() { "a1", "a2", "a3" }.Contains(a.testFieldString) == false).ToList(); + var nsql11333 = select.Where(a => !new List() { "a1", "a2", "a3" }.Contains(a.testFieldString)).ToList(); + + var nsql11111a = select.Where(a => new List(new[] { "a1", "a2", "a3" }).Contains(a.testFieldString)).ToList(); + var nsql11222b = select.Where(a => new List(new[] { "a1", "a2", "a3" }).Contains(a.testFieldString) == false).ToList(); + var nsql11333c = select.Where(a => !new List(new[] { "a1", "a2", "a3" }).Contains(a.testFieldString)).ToList(); + + var ninarray2 = new List() { "a1", "a2", "a3" }; + var nsql111111 = select.Where(a => ninarray2.Contains(a.testFieldString)).ToList(); + var nsql112222 = select.Where(a => ninarray2.Contains(a.testFieldString) == false).ToList(); + var nsql113333 = select.Where(a => !ninarray2.Contains(a.testFieldString)).ToList(); + + var ninarray2n = Enumerable.Range(1, 3333).Select(a => "testnvarchar" + a).ToArray(); + var nsql1111111 = select.Where(a => ninarray2n.Contains(a.testFieldString)).ToList(); + var nsql1122222 = select.Where(a => ninarray2n.Contains(a.testFieldString) == false).ToList(); + var nsql1133333 = select.Where(a => !ninarray2n.Contains(a.testFieldString)).ToList(); + + //varchar + IEnumerable vstringlinqlist = new List(new[] { "a1", "a2", "a3" }); + var vtestlinq = select.Where(a => vstringlinqlist.Contains(a.testFieldStringVarchar)).ToList(); + + //in not in + var vsql111 = select.Where(a => new[] { "a1", "a2", "a3" }.Contains(a.testFieldStringVarchar)).ToList(); + var vsql112 = select.Where(a => new[] { "a1", "a2", "a3" }.Contains(a.testFieldStringVarchar) == false).ToList(); + var vsql113 = select.Where(a => !new[] { "a1", "a2", "a3" }.Contains(a.testFieldStringVarchar)).ToList(); + + var vinarray = new[] { "a1", "a2", "a3" }; + var vsql1111 = select.Where(a => ninarray.Contains(a.testFieldStringVarchar)).ToList(); + var vsql1122 = select.Where(a => ninarray.Contains(a.testFieldStringVarchar) == false).ToList(); + var vsql1133 = select.Where(a => !ninarray.Contains(a.testFieldStringVarchar)).ToList(); + + //in not in + var vsql11111 = select.Where(a => new List() { "a1", "a2", "a3" }.Contains(a.testFieldStringVarchar)).ToList(); + var vsql11222 = select.Where(a => new List() { "a1", "a2", "a3" }.Contains(a.testFieldStringVarchar) == false).ToList(); + var vsql11333 = select.Where(a => !new List() { "a1", "a2", "a3" }.Contains(a.testFieldStringVarchar)).ToList(); + + var vsql11111a = select.Where(a => new List(new[] { "a1", "a2", "a3" }).Contains(a.testFieldStringVarchar)).ToList(); + var vsql11222b = select.Where(a => new List(new[] { "a1", "a2", "a3" }).Contains(a.testFieldStringVarchar) == false).ToList(); + var vsql11333c = select.Where(a => !new List(new[] { "a1", "a2", "a3" }).Contains(a.testFieldStringVarchar)).ToList(); + + var vinarray2 = new List() { "a1", "a2", "a3" }; + var vsql111111 = select.Where(a => ninarray2.Contains(a.testFieldStringVarchar)).ToList(); + var vsql112222 = select.Where(a => ninarray2.Contains(a.testFieldStringVarchar) == false).ToList(); + var vsql113333 = select.Where(a => !ninarray2.Contains(a.testFieldStringVarchar)).ToList(); + + var vinarray2n = Enumerable.Range(1, 3333).Select(a => "testvarchar" + a).ToArray(); + var vsql1111111 = select.Where(a => vinarray2n.Contains(a.testFieldStringVarchar)).ToList(); + var vsql1122222 = select.Where(a => vinarray2n.Contains(a.testFieldStringVarchar) == false).ToList(); + var vsql1133333 = select.Where(a => !vinarray2n.Contains(a.testFieldStringVarchar)).ToList(); } [Table(Name = "tb_alltype")] @@ -123,6 +194,9 @@ namespace FreeSql.Tests.Odbc.SqlServerExpression public DateTimeOffset testFieldDateTimeOffset { get; set; } public byte[] testFieldBytes { get; set; } public string testFieldString { get; set; } + + [Column(DbType = "varchar(255)")] + public string testFieldStringVarchar { get; set; } public Guid testFieldGuid { get; set; } public bool? testFieldBoolNullable { get; set; } diff --git a/FreeSql.Tests/FreeSql.Tests/MySql/MySqlExpression/OtherTest.cs b/FreeSql.Tests/FreeSql.Tests/MySql/MySqlExpression/OtherTest.cs index db07a187..d926eed7 100644 --- a/FreeSql.Tests/FreeSql.Tests/MySql/MySqlExpression/OtherTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/MySql/MySqlExpression/OtherTest.cs @@ -106,6 +106,11 @@ namespace FreeSql.Tests.MySqlExpression var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList(); var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList(); var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList(); + + var inarray2n = Enumerable.Range(1, 3333).ToArray(); + var sql1111111 = select.Where(a => inarray2n.Contains(a.testFieldInt)).ToList(); + var sql1122222 = select.Where(a => inarray2n.Contains(a.testFieldInt) == false).ToList(); + var sql1133333 = select.Where(a => !inarray2n.Contains(a.testFieldInt)).ToList(); } [Table(Name = "tb_alltype")] diff --git a/FreeSql.Tests/FreeSql.Tests/Oracle/OracleExpression/OtherTest.cs b/FreeSql.Tests/FreeSql.Tests/Oracle/OracleExpression/OtherTest.cs index 1c7d9048..d8317ef1 100644 --- a/FreeSql.Tests/FreeSql.Tests/Oracle/OracleExpression/OtherTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Oracle/OracleExpression/OtherTest.cs @@ -101,6 +101,11 @@ namespace FreeSql.Tests.OracleExpression var sql111111 = select.Where(a => inarray.Contains(a.Int)).ToList(); //var sql112222 = select.Where(a => inarray.Contains(a.Int) == false).ToList(); var sql113333 = select.Where(a => !inarray.Contains(a.Int)).ToList(); + + var inarray2n = Enumerable.Range(1, 3333).ToArray(); + var sql1111111 = select.Where(a => inarray2n.Contains(a.Int)).ToList(); + var sql1122222 = select.Where(a => inarray2n.Contains(a.Int) == false).ToList(); + var sql1133333 = select.Where(a => !inarray2n.Contains(a.Int)).ToList(); } [Table(Name = "tb_alltype")] diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/OtherTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/OtherTest.cs index 950c538c..4ba7feea 100644 --- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/OtherTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/OtherTest.cs @@ -130,6 +130,11 @@ namespace FreeSql.Tests.PostgreSQLExpression var sql7 = select.Where(a => a.testFieldIntArray.GetLongLength(1) > 0).ToList(); var sql8 = select.Where(a => a.testFieldIntArray.Length > 0).ToList(); var sql9 = select.Where(a => a.testFieldIntArray.Count() > 0).ToList(); + + var inarray2n = Enumerable.Range(1, 3333).ToArray(); + var sql1111111 = select.Where(a => inarray2n.Contains(a.testFieldInt)).ToList(); + var sql1122222 = select.Where(a => inarray2n.Contains(a.testFieldInt) == false).ToList(); + var sql1133333 = select.Where(a => !inarray2n.Contains(a.testFieldInt)).ToList(); } [Fact] diff --git a/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerExpression/OtherTest.cs b/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerExpression/OtherTest.cs index 459fc7bf..ce27dceb 100644 --- a/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerExpression/OtherTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerExpression/OtherTest.cs @@ -106,6 +106,11 @@ namespace FreeSql.Tests.SqlServerExpression var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList(); var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList(); + var inarray2n = Enumerable.Range(1, 3333).ToArray(); + var sql1111111 = select.Where(a => inarray2n.Contains(a.testFieldInt)).ToList(); + var sql1122222 = select.Where(a => inarray2n.Contains(a.testFieldInt) == false).ToList(); + var sql1133333 = select.Where(a => !inarray2n.Contains(a.testFieldInt)).ToList(); + //nvarchar IEnumerable stringlinqlist = new List(new[] { "a1", "a2", "a3" }); var ntestlinq = select.Where(a => stringlinqlist.Contains(a.testFieldString)).ToList(); @@ -134,6 +139,11 @@ namespace FreeSql.Tests.SqlServerExpression var nsql112222 = select.Where(a => ninarray2.Contains(a.testFieldString) == false).ToList(); var nsql113333 = select.Where(a => !ninarray2.Contains(a.testFieldString)).ToList(); + var ninarray2n = Enumerable.Range(1, 3333).Select(a => "testnvarchar" + a).ToArray(); + var nsql1111111 = select.Where(a => ninarray2n.Contains(a.testFieldString)).ToList(); + var nsql1122222 = select.Where(a => ninarray2n.Contains(a.testFieldString) == false).ToList(); + var nsql1133333 = select.Where(a => !ninarray2n.Contains(a.testFieldString)).ToList(); + //varchar IEnumerable vstringlinqlist = new List(new[] { "a1", "a2", "a3" }); var vtestlinq = select.Where(a => vstringlinqlist.Contains(a.testFieldStringVarchar)).ToList(); @@ -161,6 +171,11 @@ namespace FreeSql.Tests.SqlServerExpression var vsql111111 = select.Where(a => ninarray2.Contains(a.testFieldStringVarchar)).ToList(); var vsql112222 = select.Where(a => ninarray2.Contains(a.testFieldStringVarchar) == false).ToList(); var vsql113333 = select.Where(a => !ninarray2.Contains(a.testFieldStringVarchar)).ToList(); + + var vinarray2n = Enumerable.Range(1, 3333).Select(a => "testvarchar" + a).ToArray(); + var vsql1111111 = select.Where(a => vinarray2n.Contains(a.testFieldStringVarchar)).ToList(); + var vsql1122222 = select.Where(a => vinarray2n.Contains(a.testFieldStringVarchar) == false).ToList(); + var vsql1133333 = select.Where(a => !vinarray2n.Contains(a.testFieldStringVarchar)).ToList(); } [Table(Name = "tb_alltypeOther")] diff --git a/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteExpression/OtherTest.cs b/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteExpression/OtherTest.cs index 3276034d..51aa61f6 100644 --- a/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteExpression/OtherTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteExpression/OtherTest.cs @@ -100,6 +100,11 @@ namespace FreeSql.Tests.SqliteExpression var sql111111 = select.Where(a => inarray.Contains(a.Int)).ToList(); var sql112222 = select.Where(a => inarray.Contains(a.Int) == false).ToList(); var sql113333 = select.Where(a => !inarray.Contains(a.Int)).ToList(); + + var inarray2n = Enumerable.Range(1, 3333).ToArray(); + var sql1111111 = select.Where(a => inarray2n.Contains(a.Int)).ToList(); + var sql1122222 = select.Where(a => inarray2n.Contains(a.Int) == false).ToList(); + var sql1133333 = select.Where(a => !inarray2n.Contains(a.Int)).ToList(); } [Table(Name = "tb_alltype")] diff --git a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderUtils.cs b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderUtils.cs index 56c43677..9edce10c 100644 --- a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderUtils.cs +++ b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderUtils.cs @@ -1,6 +1,8 @@ using FreeSql.Internal.Model; using System; +using System.Collections; using System.Collections.Concurrent; +using System.Text; using System.Text.RegularExpressions; namespace FreeSql.Internal.CommonProvider @@ -23,5 +25,24 @@ namespace FreeSql.Internal.CommonProvider try { string ret = string.Format(filter, nparms); return ret; } catch { return filter; } } static ConcurrentDictionary _dicAddslashesReplaceIsNull = new ConcurrentDictionary(); + + protected string AddslashesIEnumerable(object param, Type mapType, ColumnInfo mapColumn) + { + var sb = new StringBuilder(); + var ie = param as IEnumerable; + var idx = 0; + foreach (var z in ie) + { + sb.Append(","); + if (++idx > 500) + { + sb.Append(" \r\n \r\n"); //500元素分割, 3空格\r\n4空格 + idx = 1; + } + sb.Append(AddslashesProcessParam(z, mapType, mapColumn)); + } + + return sb.Length == 0 ? "(NULL)" : sb.Remove(0, 1).Insert(0, "(").Append(")").ToString(); + } } } diff --git a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs index 602ed684..c101e092 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs @@ -49,12 +49,8 @@ namespace FreeSql.MySql else if (param is MygisGeometry) return string.Concat("ST_GeomFromText('", (param as MygisGeometry).AsText().Replace("'", "''"), "')"); else if (param is IEnumerable) - { - var sb = new StringBuilder(); - var ie = param as IEnumerable; - foreach (var z in ie) sb.Append(",").Append(AddslashesProcessParam(z, mapType, mapColumn)); - return sb.Length == 0 ? "(NULL)" : sb.Remove(0, 1).Insert(0, "(").Append(")").ToString(); - } + return AddslashesIEnumerable(param, mapType, mapColumn); + return string.Concat("'", param.ToString().Replace("'", "''"), "'"); } diff --git a/Providers/FreeSql.Provider.MySql/MySqlExpression.cs b/Providers/FreeSql.Provider.MySql/MySqlExpression.cs index 2f3f78a8..f8a2e19e 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlExpression.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlExpression.cs @@ -109,8 +109,8 @@ namespace FreeSql.MySql switch (callExp.Method.Name) { case "Contains": - //判断 in - return $"({args1}) in {left}"; + //判断 in //在各大 Provider AdoProvider 中已约定,500元素分割, 3空格\r\n4空格 + return $"(({args1}) in {left.Replace(", \r\n \r\n", $") \r\n OR ({args1}) in (")})"; } } break; diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs index 2d7a2b0e..27352355 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs @@ -50,12 +50,8 @@ namespace FreeSql.Odbc.Default else if (param is TimeSpan || param is TimeSpan?) return Adapter.TimeSpanRawSql(param); else if (param is IEnumerable) - { - var sb = new StringBuilder(); - var ie = param as IEnumerable; - foreach (var z in ie) sb.Append(",").Append(AddslashesProcessParam(z, mapType, mapColumn)); - return sb.Length == 0 ? "(NULL)" : sb.Remove(0, 1).Insert(0, "(").Append(")").ToString(); - } + return AddslashesIEnumerable(param, mapType, mapColumn); + return string.Concat("'", param.ToString().Replace("'", "''"), "'"); } diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcExpression.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcExpression.cs index 4d2bf9ea..f3aa470d 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/OdbcExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcExpression.cs @@ -116,8 +116,8 @@ namespace FreeSql.Odbc.Default switch (callExp.Method.Name) { case "Contains": - //判断 in - return $"({args1}) in {left}"; + //判断 in //在各大 Provider AdoProvider 中已约定,500元素分割, 3空格\r\n4空格 + return $"(({args1}) in {left.Replace(", \r\n \r\n", $") \r\n OR ({args1}) in (")})"; } } break; diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs index 0aa06d1a..8c6f5c24 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs @@ -46,13 +46,9 @@ namespace FreeSql.Odbc.MySql return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'"); else if (param is TimeSpan || param is TimeSpan?) return ((TimeSpan)param).Ticks / 10; - else if (param is IEnumerable) - { - var sb = new StringBuilder(); - var ie = param as IEnumerable; - foreach (var z in ie) sb.Append(",").Append(AddslashesProcessParam(z, mapType, mapColumn)); - return sb.Length == 0 ? "(NULL)" : sb.Remove(0, 1).Insert(0, "(").Append(")").ToString(); - } + else if (param is IEnumerable) + return AddslashesIEnumerable(param, mapType, mapColumn); + return string.Concat("'", param.ToString().Replace("'", "''"), "'"); } diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs index 14bce855..36c2261a 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs @@ -109,8 +109,8 @@ namespace FreeSql.Odbc.MySql switch (callExp.Method.Name) { case "Contains": - //判断 in - return $"({args1}) in {left}"; + //判断 in //在各大 Provider AdoProvider 中已约定,500元素分割, 3空格\r\n4空格 + return $"(({args1}) in {left.Replace(", \r\n \r\n", $") \r\n OR ({args1}) in (")})"; } } break; diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs index 6a3cd58b..98e7921a 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs @@ -46,12 +46,8 @@ namespace FreeSql.Odbc.Oracle else if (param is TimeSpan || param is TimeSpan?) return $"numtodsinterval({((TimeSpan)param).Ticks * 1.0 / 10000000},'second')"; else if (param is IEnumerable) - { - var sb = new StringBuilder(); - var ie = param as IEnumerable; - foreach (var z in ie) sb.Append(",").Append(AddslashesProcessParam(z, mapType, mapColumn)); - return sb.Length == 0 ? "(NULL)" : sb.Remove(0, 1).Insert(0, "(").Append(")").ToString(); - } + return AddslashesIEnumerable(param, mapType, mapColumn); + return string.Concat("'", param.ToString().Replace("'", "''"), "'"); //if (param is string) return string.Concat('N', nparms[a]); } diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs index 651fbef3..71190478 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs @@ -109,8 +109,8 @@ namespace FreeSql.Odbc.Oracle switch (callExp.Method.Name) { case "Contains": - //判断 in - return $"({args1}) in {left}"; + //判断 in //在各大 Provider AdoProvider 中已约定,500元素分割, 3空格\r\n4空格 + return $"(({args1}) in {left.Replace(", \r\n \r\n", $") \r\n OR ({args1}) in (")})"; } } break; diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs index 862ea601..0777ffb8 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs @@ -48,12 +48,8 @@ namespace FreeSql.Odbc.PostgreSQL else if (param is TimeSpan || param is TimeSpan?) return ((TimeSpan)param).Ticks / 10; else if (param is IEnumerable) - { - var sb = new StringBuilder(); - var ie = param as IEnumerable; - foreach (var z in ie) sb.Append(",").Append(AddslashesProcessParam(z, mapType, mapColumn)); - return sb.Length == 0 ? "(NULL)" : sb.Remove(0, 1).Insert(0, "(").Append(")").ToString(); - } + return AddslashesIEnumerable(param, mapType, mapColumn); + return string.Concat("'", param.ToString().Replace("'", "''"), "'"); } diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs index 28da1107..bee2bacc 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs @@ -137,9 +137,9 @@ namespace FreeSql.Odbc.PostgreSQL tsc.SetMapColumnTmp(null).SetMapTypeReturnOld(oldMapType); //判断 in 或 array @> array if (left.StartsWith("array[") || left.EndsWith("]")) - return $"{args1} in ({left.Substring(6, left.Length - 7)})"; - if (left.StartsWith("(") || left.EndsWith(")")) - return $"{args1} in {left}"; + return $"({args1}) in ({left.Substring(6, left.Length - 7)})"; + if (left.StartsWith("(") || left.EndsWith(")")) //在各大 Provider AdoProvider 中已约定,500元素分割, 3空格\r\n4空格 + return $"(({args1}) in {left.Replace(", \r\n \r\n", $") \r\n OR ({args1}) in (")})"; if (args1.StartsWith("(") || args1.EndsWith(")")) args1 = $"array[{args1.TrimStart('(').TrimEnd(')')}]"; args1 = $"array[{args1}]"; if (objExp != null) diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs index 4ee2b561..20e197c6 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs @@ -62,13 +62,9 @@ namespace FreeSql.Odbc.SqlServer } else if (param is TimeSpan || param is TimeSpan?) return ((TimeSpan)param).TotalSeconds; - else if (param is IEnumerable) - { - var sb = new StringBuilder(); - var ie = param as IEnumerable; - foreach (var z in ie) sb.Append(",").Append(AddslashesProcessParam(z, mapType, mapColumn)); - return sb.Length == 0 ? "(NULL)" : sb.Remove(0, 1).Insert(0, "(").Append(")").ToString(); - } + else if (param is IEnumerable) + return AddslashesIEnumerable(param, mapType, mapColumn); + return string.Concat("'", param.ToString().Replace("'", "''"), "'"); } diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs index 7c1712bc..47df3413 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs @@ -113,8 +113,8 @@ namespace FreeSql.Odbc.SqlServer switch (callExp.Method.Name) { case "Contains": - //判断 in - return $"({args1}) in {left}"; + //判断 in //在各大 Provider AdoProvider 中已约定,500元素分割, 3空格\r\n4空格 + return $"(({args1}) in {left.Replace(", \r\n \r\n", $") \r\n OR ({args1}) in (")})"; } } break; diff --git a/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs b/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs index 424b8175..3c637833 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs @@ -46,12 +46,8 @@ namespace FreeSql.Oracle else if (param is TimeSpan || param is TimeSpan?) return $"numtodsinterval({((TimeSpan)param).Ticks * 1.0 / 10000000},'second')"; else if (param is IEnumerable) - { - var sb = new StringBuilder(); - var ie = param as IEnumerable; - foreach (var z in ie) sb.Append(",").Append(AddslashesProcessParam(z, mapType, mapColumn)); - return sb.Length == 0 ? "(NULL)" : sb.Remove(0, 1).Insert(0, "(").Append(")").ToString(); - } + return AddslashesIEnumerable(param, mapType, mapColumn); + return string.Concat("'", param.ToString().Replace("'", "''"), "'"); //if (param is string) return string.Concat('N', nparms[a]); } diff --git a/Providers/FreeSql.Provider.Oracle/OracleExpression.cs b/Providers/FreeSql.Provider.Oracle/OracleExpression.cs index 818dff2b..9ea04aaf 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleExpression.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleExpression.cs @@ -109,8 +109,8 @@ namespace FreeSql.Oracle switch (callExp.Method.Name) { case "Contains": - //判断 in - return $"({args1}) in {left}"; + //判断 in //在各大 Provider AdoProvider 中已约定,500元素分割, 3空格\r\n4空格 + return $"(({args1}) in {left.Replace(", \r\n \r\n", $") \r\n OR ({args1}) in (")})"; } } break; diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs index ae3c9e3f..f1600c24 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs @@ -65,12 +65,8 @@ namespace FreeSql.PostgreSQL return pghstore.Append("'::hstore"); } else if (param is IEnumerable) - { - var sb = new StringBuilder(); - var ie = param as IEnumerable; - foreach (var z in ie) sb.Append(",").Append(AddslashesProcessParam(z, mapType, mapColumn)); - return sb.Length == 0 ? "(NULL)" : sb.Remove(0, 1).Insert(0, "(").Append(")").ToString(); - } + return AddslashesIEnumerable(param, mapType, mapColumn); + return string.Concat("'", param.ToString().Replace("'", "''"), "'"); } diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs index 86760acc..78184791 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs @@ -167,9 +167,9 @@ namespace FreeSql.PostgreSQL tsc.SetMapColumnTmp(null).SetMapTypeReturnOld(oldMapType); //判断 in 或 array @> array if (left.StartsWith("array[") || left.EndsWith("]")) - return $"{args1} in ({left.Substring(6, left.Length - 7)})"; - if (left.StartsWith("(") || left.EndsWith(")")) - return $"{args1} in {left}"; + return $"({args1}) in ({left.Substring(6, left.Length - 7)})"; + if (left.StartsWith("(") || left.EndsWith(")")) //在各大 Provider AdoProvider 中已约定,500元素分割, 3空格\r\n4空格 + return $"(({args1}) in {left.Replace(", \r\n \r\n", $") \r\n OR ({args1}) in (")})"; if (args1.StartsWith("(") || args1.EndsWith(")")) args1 = $"array[{args1.TrimStart('(').TrimEnd(')')}]"; args1 = $"array[{args1}]"; if (objExp != null) diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs index b6e43640..2d898e7a 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs @@ -63,12 +63,8 @@ namespace FreeSql.SqlServer else if (param is TimeSpan || param is TimeSpan?) return ((TimeSpan)param).TotalSeconds; else if (param is IEnumerable) - { - var sb = new StringBuilder(); - var ie = param as IEnumerable; - foreach (var z in ie) sb.Append(",").Append(AddslashesProcessParam(z, mapType, mapColumn)); - return sb.Length == 0 ? "(NULL)" : sb.Remove(0, 1).Insert(0, "(").Append(")").ToString(); - } + return AddslashesIEnumerable(param, mapType, mapColumn); + return string.Concat("'", param.ToString().Replace("'", "''"), "'"); } diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs index 85edc86a..3e068d4a 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs @@ -113,8 +113,8 @@ namespace FreeSql.SqlServer switch (callExp.Method.Name) { case "Contains": - //判断 in - return $"({args1}) in {left}"; + //判断 in //在各大 Provider AdoProvider 中已约定,500元素分割, 3空格\r\n4空格 + return $"(({args1}) in {left.Replace(", \r\n \r\n", $") \r\n OR ({args1}) in (")})"; } } break; diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs index b8175943..d57c74ec 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs @@ -45,12 +45,8 @@ namespace FreeSql.Sqlite else if (param is TimeSpan || param is TimeSpan?) return ((TimeSpan)param).Ticks / 10000; else if (param is IEnumerable) - { - var sb = new StringBuilder(); - var ie = param as IEnumerable; - foreach (var z in ie) sb.Append(",").Append(AddslashesProcessParam(z, mapType, mapColumn)); - return sb.Length == 0 ? "(NULL)" : sb.Remove(0, 1).Insert(0, "(").Append(")").ToString(); - } + return AddslashesIEnumerable(param, mapType, mapColumn); + return string.Concat("'", param.ToString().Replace("'", "''"), "'"); } diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs b/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs index 1c2f821d..922a7bef 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs @@ -109,8 +109,8 @@ namespace FreeSql.Sqlite switch (callExp.Method.Name) { case "Contains": - //判断 in - return $"({args1}) in {left}"; + //判断 in //在各大 Provider AdoProvider 中已约定,500元素分割, 3空格\r\n4空格 + return $"(({args1}) in {left.Replace(", \r\n \r\n", $") \r\n OR ({args1}) in (")})"; } } break;