mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 09:15:27 +08:00 
			
		
		
		
	- 优化 Contains 表达式解析为 where in 自动拆分,防止大于 1000 的 SQL 错误;
This commit is contained in:
		@@ -106,6 +106,11 @@ namespace FreeSql.Tests.MySqlConnectorExpression
 | 
				
			|||||||
            var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
 | 
					            var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
 | 
				
			||||||
            var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).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")]
 | 
					        [Table(Name = "tb_alltype")]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -72,6 +72,11 @@ namespace FreeSql.Tests.Odbc.DefaultExpression
 | 
				
			|||||||
            var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
 | 
					            var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
 | 
				
			||||||
            var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).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")]
 | 
					        [Table(Name = "tb_alltype")]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -106,6 +106,11 @@ namespace FreeSql.Tests.Odbc.MySqlExpression
 | 
				
			|||||||
            var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
 | 
					            var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
 | 
				
			||||||
            var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).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")]
 | 
					        [Table(Name = "tb_alltype")]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -101,6 +101,11 @@ namespace FreeSql.Tests.Odbc.OracleExpression
 | 
				
			|||||||
            var sql111111 = select.Where(a => inarray.Contains(a.Int)).ToList();
 | 
					            var sql111111 = select.Where(a => inarray.Contains(a.Int)).ToList();
 | 
				
			||||||
            //var sql112222 = select.Where(a => inarray.Contains(a.Int) == false).ToList();
 | 
					            //var sql112222 = select.Where(a => inarray.Contains(a.Int) == false).ToList();
 | 
				
			||||||
            var sql113333 = select.Where(a => !inarray.Contains(a.Int)).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")]
 | 
					        [Table(Name = "tb_alltype")]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -108,6 +108,11 @@ namespace FreeSql.Tests.Odbc.PostgreSQLExpression
 | 
				
			|||||||
            var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
 | 
					            var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
 | 
				
			||||||
            var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).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();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -97,6 +97,77 @@ namespace FreeSql.Tests.Odbc.SqlServerExpression
 | 
				
			|||||||
            var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
 | 
					            var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
 | 
				
			||||||
            var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).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();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //nvarchar
 | 
				
			||||||
 | 
					            IEnumerable<string> stringlinqlist = new List<string>(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<string>() { "a1", "a2", "a3" }.Contains(a.testFieldString)).ToList();
 | 
				
			||||||
 | 
					            var nsql11222 = select.Where(a => new List<string>() { "a1", "a2", "a3" }.Contains(a.testFieldString) == false).ToList();
 | 
				
			||||||
 | 
					            var nsql11333 = select.Where(a => !new List<string>() { "a1", "a2", "a3" }.Contains(a.testFieldString)).ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var nsql11111a = select.Where(a => new List<string>(new[] { "a1", "a2", "a3" }).Contains(a.testFieldString)).ToList();
 | 
				
			||||||
 | 
					            var nsql11222b = select.Where(a => new List<string>(new[] { "a1", "a2", "a3" }).Contains(a.testFieldString) == false).ToList();
 | 
				
			||||||
 | 
					            var nsql11333c = select.Where(a => !new List<string>(new[] { "a1", "a2", "a3" }).Contains(a.testFieldString)).ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var ninarray2 = new List<string>() { "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<string> vstringlinqlist = new List<string>(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<string>() { "a1", "a2", "a3" }.Contains(a.testFieldStringVarchar)).ToList();
 | 
				
			||||||
 | 
					            var vsql11222 = select.Where(a => new List<string>() { "a1", "a2", "a3" }.Contains(a.testFieldStringVarchar) == false).ToList();
 | 
				
			||||||
 | 
					            var vsql11333 = select.Where(a => !new List<string>() { "a1", "a2", "a3" }.Contains(a.testFieldStringVarchar)).ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var vsql11111a = select.Where(a => new List<string>(new[] { "a1", "a2", "a3" }).Contains(a.testFieldStringVarchar)).ToList();
 | 
				
			||||||
 | 
					            var vsql11222b = select.Where(a => new List<string>(new[] { "a1", "a2", "a3" }).Contains(a.testFieldStringVarchar) == false).ToList();
 | 
				
			||||||
 | 
					            var vsql11333c = select.Where(a => !new List<string>(new[] { "a1", "a2", "a3" }).Contains(a.testFieldStringVarchar)).ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var vinarray2 = new List<string>() { "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")]
 | 
					        [Table(Name = "tb_alltype")]
 | 
				
			||||||
@@ -123,6 +194,9 @@ namespace FreeSql.Tests.Odbc.SqlServerExpression
 | 
				
			|||||||
            public DateTimeOffset testFieldDateTimeOffset { get; set; }
 | 
					            public DateTimeOffset testFieldDateTimeOffset { get; set; }
 | 
				
			||||||
            public byte[] testFieldBytes { get; set; }
 | 
					            public byte[] testFieldBytes { get; set; }
 | 
				
			||||||
            public string testFieldString { get; set; }
 | 
					            public string testFieldString { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            [Column(DbType = "varchar(255)")]
 | 
				
			||||||
 | 
					            public string testFieldStringVarchar { get; set; }
 | 
				
			||||||
            public Guid testFieldGuid { get; set; }
 | 
					            public Guid testFieldGuid { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            public bool? testFieldBoolNullable { get; set; }
 | 
					            public bool? testFieldBoolNullable { get; set; }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -106,6 +106,11 @@ namespace FreeSql.Tests.MySqlExpression
 | 
				
			|||||||
            var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
 | 
					            var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
 | 
				
			||||||
            var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).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")]
 | 
					        [Table(Name = "tb_alltype")]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -101,6 +101,11 @@ namespace FreeSql.Tests.OracleExpression
 | 
				
			|||||||
            var sql111111 = select.Where(a => inarray.Contains(a.Int)).ToList();
 | 
					            var sql111111 = select.Where(a => inarray.Contains(a.Int)).ToList();
 | 
				
			||||||
            //var sql112222 = select.Where(a => inarray.Contains(a.Int) == false).ToList();
 | 
					            //var sql112222 = select.Where(a => inarray.Contains(a.Int) == false).ToList();
 | 
				
			||||||
            var sql113333 = select.Where(a => !inarray.Contains(a.Int)).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")]
 | 
					        [Table(Name = "tb_alltype")]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -130,6 +130,11 @@ namespace FreeSql.Tests.PostgreSQLExpression
 | 
				
			|||||||
            var sql7 = select.Where(a => a.testFieldIntArray.GetLongLength(1) > 0).ToList();
 | 
					            var sql7 = select.Where(a => a.testFieldIntArray.GetLongLength(1) > 0).ToList();
 | 
				
			||||||
            var sql8 = select.Where(a => a.testFieldIntArray.Length > 0).ToList();
 | 
					            var sql8 = select.Where(a => a.testFieldIntArray.Length > 0).ToList();
 | 
				
			||||||
            var sql9 = select.Where(a => a.testFieldIntArray.Count() > 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]
 | 
					        [Fact]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -106,6 +106,11 @@ namespace FreeSql.Tests.SqlServerExpression
 | 
				
			|||||||
            var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).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();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            //nvarchar
 | 
					            //nvarchar
 | 
				
			||||||
            IEnumerable<string> stringlinqlist = new List<string>(new[] { "a1", "a2", "a3" });
 | 
					            IEnumerable<string> stringlinqlist = new List<string>(new[] { "a1", "a2", "a3" });
 | 
				
			||||||
            var ntestlinq = select.Where(a => stringlinqlist.Contains(a.testFieldString)).ToList();
 | 
					            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 nsql112222 = select.Where(a => ninarray2.Contains(a.testFieldString) == false).ToList();
 | 
				
			||||||
            var nsql113333 = select.Where(a => !ninarray2.Contains(a.testFieldString)).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
 | 
					            //varchar
 | 
				
			||||||
            IEnumerable<string> vstringlinqlist = new List<string>(new[] { "a1", "a2", "a3" });
 | 
					            IEnumerable<string> vstringlinqlist = new List<string>(new[] { "a1", "a2", "a3" });
 | 
				
			||||||
            var vtestlinq = select.Where(a => vstringlinqlist.Contains(a.testFieldStringVarchar)).ToList();
 | 
					            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 vsql111111 = select.Where(a => ninarray2.Contains(a.testFieldStringVarchar)).ToList();
 | 
				
			||||||
            var vsql112222 = select.Where(a => ninarray2.Contains(a.testFieldStringVarchar) == false).ToList();
 | 
					            var vsql112222 = select.Where(a => ninarray2.Contains(a.testFieldStringVarchar) == false).ToList();
 | 
				
			||||||
            var vsql113333 = select.Where(a => !ninarray2.Contains(a.testFieldStringVarchar)).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")]
 | 
					        [Table(Name = "tb_alltypeOther")]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -100,6 +100,11 @@ namespace FreeSql.Tests.SqliteExpression
 | 
				
			|||||||
            var sql111111 = select.Where(a => inarray.Contains(a.Int)).ToList();
 | 
					            var sql111111 = select.Where(a => inarray.Contains(a.Int)).ToList();
 | 
				
			||||||
            var sql112222 = select.Where(a => inarray.Contains(a.Int) == false).ToList();
 | 
					            var sql112222 = select.Where(a => inarray.Contains(a.Int) == false).ToList();
 | 
				
			||||||
            var sql113333 = select.Where(a => !inarray.Contains(a.Int)).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")]
 | 
					        [Table(Name = "tb_alltype")]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,8 @@
 | 
				
			|||||||
using FreeSql.Internal.Model;
 | 
					using FreeSql.Internal.Model;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections;
 | 
				
			||||||
using System.Collections.Concurrent;
 | 
					using System.Collections.Concurrent;
 | 
				
			||||||
 | 
					using System.Text;
 | 
				
			||||||
using System.Text.RegularExpressions;
 | 
					using System.Text.RegularExpressions;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace FreeSql.Internal.CommonProvider
 | 
					namespace FreeSql.Internal.CommonProvider
 | 
				
			||||||
@@ -23,5 +25,24 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
            try { string ret = string.Format(filter, nparms); return ret; } catch { return filter; }
 | 
					            try { string ret = string.Format(filter, nparms); return ret; } catch { return filter; }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        static ConcurrentDictionary<int, Regex> _dicAddslashesReplaceIsNull = new ConcurrentDictionary<int, Regex>();
 | 
					        static ConcurrentDictionary<int, Regex> _dicAddslashesReplaceIsNull = new ConcurrentDictionary<int, Regex>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        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();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -49,12 +49,8 @@ namespace FreeSql.MySql
 | 
				
			|||||||
            else if (param is MygisGeometry)
 | 
					            else if (param is MygisGeometry)
 | 
				
			||||||
                return string.Concat("ST_GeomFromText('", (param as MygisGeometry).AsText().Replace("'", "''"), "')");
 | 
					                return string.Concat("ST_GeomFromText('", (param as MygisGeometry).AsText().Replace("'", "''"), "')");
 | 
				
			||||||
            else if (param is IEnumerable)
 | 
					            else if (param is IEnumerable)
 | 
				
			||||||
            {
 | 
					                return AddslashesIEnumerable(param, mapType, mapColumn);
 | 
				
			||||||
                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 string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
					            return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -109,8 +109,8 @@ namespace FreeSql.MySql
 | 
				
			|||||||
                        switch (callExp.Method.Name)
 | 
					                        switch (callExp.Method.Name)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            case "Contains":
 | 
					                            case "Contains":
 | 
				
			||||||
                                //判断 in
 | 
					                                //判断 in //在各大 Provider AdoProvider 中已约定,500元素分割, 3空格\r\n4空格
 | 
				
			||||||
                                return $"({args1}) in {left}";
 | 
					                                return $"(({args1}) in {left.Replace(",   \r\n    \r\n", $") \r\n OR ({args1}) in (")})";
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,12 +50,8 @@ namespace FreeSql.Odbc.Default
 | 
				
			|||||||
            else if (param is TimeSpan || param is TimeSpan?)
 | 
					            else if (param is TimeSpan || param is TimeSpan?)
 | 
				
			||||||
                return Adapter.TimeSpanRawSql(param);
 | 
					                return Adapter.TimeSpanRawSql(param);
 | 
				
			||||||
            else if (param is IEnumerable)
 | 
					            else if (param is IEnumerable)
 | 
				
			||||||
            {
 | 
					                return AddslashesIEnumerable(param, mapType, mapColumn);
 | 
				
			||||||
                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 string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
					            return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -116,8 +116,8 @@ namespace FreeSql.Odbc.Default
 | 
				
			|||||||
                        switch (callExp.Method.Name)
 | 
					                        switch (callExp.Method.Name)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            case "Contains":
 | 
					                            case "Contains":
 | 
				
			||||||
                                //判断 in
 | 
					                                //判断 in //在各大 Provider AdoProvider 中已约定,500元素分割, 3空格\r\n4空格
 | 
				
			||||||
                                return $"({args1}) in {left}";
 | 
					                                return $"(({args1}) in {left.Replace(",   \r\n    \r\n", $") \r\n OR ({args1}) in (")})";
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -47,12 +47,8 @@ namespace FreeSql.Odbc.MySql
 | 
				
			|||||||
            else if (param is TimeSpan || param is TimeSpan?)
 | 
					            else if (param is TimeSpan || param is TimeSpan?)
 | 
				
			||||||
                return ((TimeSpan)param).Ticks / 10;
 | 
					                return ((TimeSpan)param).Ticks / 10;
 | 
				
			||||||
            else if (param is IEnumerable) 
 | 
					            else if (param is IEnumerable) 
 | 
				
			||||||
            {
 | 
					                return AddslashesIEnumerable(param, mapType, mapColumn);
 | 
				
			||||||
                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 string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
					            return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -109,8 +109,8 @@ namespace FreeSql.Odbc.MySql
 | 
				
			|||||||
                        switch (callExp.Method.Name)
 | 
					                        switch (callExp.Method.Name)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            case "Contains":
 | 
					                            case "Contains":
 | 
				
			||||||
                                //判断 in
 | 
					                                //判断 in //在各大 Provider AdoProvider 中已约定,500元素分割, 3空格\r\n4空格
 | 
				
			||||||
                                return $"({args1}) in {left}";
 | 
					                                return $"(({args1}) in {left.Replace(",   \r\n    \r\n", $") \r\n OR ({args1}) in (")})";
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,12 +46,8 @@ namespace FreeSql.Odbc.Oracle
 | 
				
			|||||||
            else if (param is TimeSpan || param is TimeSpan?)
 | 
					            else if (param is TimeSpan || param is TimeSpan?)
 | 
				
			||||||
                return $"numtodsinterval({((TimeSpan)param).Ticks * 1.0 / 10000000},'second')";
 | 
					                return $"numtodsinterval({((TimeSpan)param).Ticks * 1.0 / 10000000},'second')";
 | 
				
			||||||
            else if (param is IEnumerable)
 | 
					            else if (param is IEnumerable)
 | 
				
			||||||
            {
 | 
					                return AddslashesIEnumerable(param, mapType, mapColumn);
 | 
				
			||||||
                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 string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
					            return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
				
			||||||
            //if (param is string) return string.Concat('N', nparms[a]);
 | 
					            //if (param is string) return string.Concat('N', nparms[a]);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -109,8 +109,8 @@ namespace FreeSql.Odbc.Oracle
 | 
				
			|||||||
                        switch (callExp.Method.Name)
 | 
					                        switch (callExp.Method.Name)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            case "Contains":
 | 
					                            case "Contains":
 | 
				
			||||||
                                //判断 in
 | 
					                                //判断 in //在各大 Provider AdoProvider 中已约定,500元素分割, 3空格\r\n4空格
 | 
				
			||||||
                                return $"({args1}) in {left}";
 | 
					                                return $"(({args1}) in {left.Replace(",   \r\n    \r\n", $") \r\n OR ({args1}) in (")})";
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -48,12 +48,8 @@ namespace FreeSql.Odbc.PostgreSQL
 | 
				
			|||||||
            else if (param is TimeSpan || param is TimeSpan?)
 | 
					            else if (param is TimeSpan || param is TimeSpan?)
 | 
				
			||||||
                return ((TimeSpan)param).Ticks / 10;
 | 
					                return ((TimeSpan)param).Ticks / 10;
 | 
				
			||||||
            else if (param is IEnumerable)
 | 
					            else if (param is IEnumerable)
 | 
				
			||||||
            {
 | 
					                return AddslashesIEnumerable(param, mapType, mapColumn);
 | 
				
			||||||
                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 string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
					            return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -137,9 +137,9 @@ namespace FreeSql.Odbc.PostgreSQL
 | 
				
			|||||||
                                tsc.SetMapColumnTmp(null).SetMapTypeReturnOld(oldMapType);
 | 
					                                tsc.SetMapColumnTmp(null).SetMapTypeReturnOld(oldMapType);
 | 
				
			||||||
                                //判断 in 或 array @> array
 | 
					                                //判断 in 或 array @> array
 | 
				
			||||||
                                if (left.StartsWith("array[") || left.EndsWith("]"))
 | 
					                                if (left.StartsWith("array[") || left.EndsWith("]"))
 | 
				
			||||||
                                    return $"{args1} in ({left.Substring(6, left.Length - 7)})";
 | 
					                                    return $"({args1}) in ({left.Substring(6, left.Length - 7)})";
 | 
				
			||||||
                                if (left.StartsWith("(") || left.EndsWith(")"))
 | 
					                                if (left.StartsWith("(") || left.EndsWith(")")) //在各大 Provider AdoProvider 中已约定,500元素分割, 3空格\r\n4空格
 | 
				
			||||||
                                    return $"{args1} in {left}";
 | 
					                                    return $"(({args1}) in {left.Replace(",   \r\n    \r\n", $") \r\n OR ({args1}) in (")})";
 | 
				
			||||||
                                if (args1.StartsWith("(") || args1.EndsWith(")")) args1 = $"array[{args1.TrimStart('(').TrimEnd(')')}]";
 | 
					                                if (args1.StartsWith("(") || args1.EndsWith(")")) args1 = $"array[{args1.TrimStart('(').TrimEnd(')')}]";
 | 
				
			||||||
                                args1 = $"array[{args1}]";
 | 
					                                args1 = $"array[{args1}]";
 | 
				
			||||||
                                if (objExp != null)
 | 
					                                if (objExp != null)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -63,12 +63,8 @@ namespace FreeSql.Odbc.SqlServer
 | 
				
			|||||||
            else if (param is TimeSpan || param is TimeSpan?)
 | 
					            else if (param is TimeSpan || param is TimeSpan?)
 | 
				
			||||||
                return ((TimeSpan)param).TotalSeconds;
 | 
					                return ((TimeSpan)param).TotalSeconds;
 | 
				
			||||||
            else if (param is IEnumerable) 
 | 
					            else if (param is IEnumerable) 
 | 
				
			||||||
            {
 | 
					                return AddslashesIEnumerable(param, mapType, mapColumn);
 | 
				
			||||||
                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 string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
					            return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -113,8 +113,8 @@ namespace FreeSql.Odbc.SqlServer
 | 
				
			|||||||
                        switch (callExp.Method.Name)
 | 
					                        switch (callExp.Method.Name)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            case "Contains":
 | 
					                            case "Contains":
 | 
				
			||||||
                                //判断 in
 | 
					                                //判断 in //在各大 Provider AdoProvider 中已约定,500元素分割, 3空格\r\n4空格
 | 
				
			||||||
                                return $"({args1}) in {left}";
 | 
					                                return $"(({args1}) in {left.Replace(",   \r\n    \r\n", $") \r\n OR ({args1}) in (")})";
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,12 +46,8 @@ namespace FreeSql.Oracle
 | 
				
			|||||||
            else if (param is TimeSpan || param is TimeSpan?)
 | 
					            else if (param is TimeSpan || param is TimeSpan?)
 | 
				
			||||||
                return $"numtodsinterval({((TimeSpan)param).Ticks * 1.0 / 10000000},'second')";
 | 
					                return $"numtodsinterval({((TimeSpan)param).Ticks * 1.0 / 10000000},'second')";
 | 
				
			||||||
            else if (param is IEnumerable)
 | 
					            else if (param is IEnumerable)
 | 
				
			||||||
            {
 | 
					                return AddslashesIEnumerable(param, mapType, mapColumn);
 | 
				
			||||||
                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 string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
					            return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
				
			||||||
            //if (param is string) return string.Concat('N', nparms[a]);
 | 
					            //if (param is string) return string.Concat('N', nparms[a]);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -109,8 +109,8 @@ namespace FreeSql.Oracle
 | 
				
			|||||||
                        switch (callExp.Method.Name)
 | 
					                        switch (callExp.Method.Name)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            case "Contains":
 | 
					                            case "Contains":
 | 
				
			||||||
                                //判断 in
 | 
					                                //判断 in //在各大 Provider AdoProvider 中已约定,500元素分割, 3空格\r\n4空格
 | 
				
			||||||
                                return $"({args1}) in {left}";
 | 
					                                return $"(({args1}) in {left.Replace(",   \r\n    \r\n", $") \r\n OR ({args1}) in (")})";
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -65,12 +65,8 @@ namespace FreeSql.PostgreSQL
 | 
				
			|||||||
                return pghstore.Append("'::hstore");
 | 
					                return pghstore.Append("'::hstore");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else if (param is IEnumerable)
 | 
					            else if (param is IEnumerable)
 | 
				
			||||||
            {
 | 
					                return AddslashesIEnumerable(param, mapType, mapColumn);
 | 
				
			||||||
                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 string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
					            return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -167,9 +167,9 @@ namespace FreeSql.PostgreSQL
 | 
				
			|||||||
                                tsc.SetMapColumnTmp(null).SetMapTypeReturnOld(oldMapType);
 | 
					                                tsc.SetMapColumnTmp(null).SetMapTypeReturnOld(oldMapType);
 | 
				
			||||||
                                //判断 in 或 array @> array
 | 
					                                //判断 in 或 array @> array
 | 
				
			||||||
                                if (left.StartsWith("array[") || left.EndsWith("]"))
 | 
					                                if (left.StartsWith("array[") || left.EndsWith("]"))
 | 
				
			||||||
                                    return $"{args1} in ({left.Substring(6, left.Length - 7)})";
 | 
					                                    return $"({args1}) in ({left.Substring(6, left.Length - 7)})";
 | 
				
			||||||
                                if (left.StartsWith("(") || left.EndsWith(")"))
 | 
					                                if (left.StartsWith("(") || left.EndsWith(")")) //在各大 Provider AdoProvider 中已约定,500元素分割, 3空格\r\n4空格
 | 
				
			||||||
                                    return $"{args1} in {left}";
 | 
					                                    return $"(({args1}) in {left.Replace(",   \r\n    \r\n", $") \r\n OR ({args1}) in (")})";
 | 
				
			||||||
                                if (args1.StartsWith("(") || args1.EndsWith(")")) args1 = $"array[{args1.TrimStart('(').TrimEnd(')')}]";
 | 
					                                if (args1.StartsWith("(") || args1.EndsWith(")")) args1 = $"array[{args1.TrimStart('(').TrimEnd(')')}]";
 | 
				
			||||||
                                args1 = $"array[{args1}]";
 | 
					                                args1 = $"array[{args1}]";
 | 
				
			||||||
                                if (objExp != null)
 | 
					                                if (objExp != null)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -63,12 +63,8 @@ namespace FreeSql.SqlServer
 | 
				
			|||||||
            else if (param is TimeSpan || param is TimeSpan?)
 | 
					            else if (param is TimeSpan || param is TimeSpan?)
 | 
				
			||||||
                return ((TimeSpan)param).TotalSeconds;
 | 
					                return ((TimeSpan)param).TotalSeconds;
 | 
				
			||||||
            else if (param is IEnumerable)
 | 
					            else if (param is IEnumerable)
 | 
				
			||||||
            {
 | 
					                return AddslashesIEnumerable(param, mapType, mapColumn);
 | 
				
			||||||
                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 string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
					            return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -113,8 +113,8 @@ namespace FreeSql.SqlServer
 | 
				
			|||||||
                        switch (callExp.Method.Name)
 | 
					                        switch (callExp.Method.Name)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            case "Contains":
 | 
					                            case "Contains":
 | 
				
			||||||
                                //判断 in
 | 
					                                //判断 in //在各大 Provider AdoProvider 中已约定,500元素分割, 3空格\r\n4空格
 | 
				
			||||||
                                return $"({args1}) in {left}";
 | 
					                                return $"(({args1}) in {left.Replace(",   \r\n    \r\n", $") \r\n OR ({args1}) in (")})";
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,12 +45,8 @@ namespace FreeSql.Sqlite
 | 
				
			|||||||
            else if (param is TimeSpan || param is TimeSpan?)
 | 
					            else if (param is TimeSpan || param is TimeSpan?)
 | 
				
			||||||
                return ((TimeSpan)param).Ticks / 10000;
 | 
					                return ((TimeSpan)param).Ticks / 10000;
 | 
				
			||||||
            else if (param is IEnumerable)
 | 
					            else if (param is IEnumerable)
 | 
				
			||||||
            {
 | 
					                return AddslashesIEnumerable(param, mapType, mapColumn);
 | 
				
			||||||
                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 string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
					            return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -109,8 +109,8 @@ namespace FreeSql.Sqlite
 | 
				
			|||||||
                        switch (callExp.Method.Name)
 | 
					                        switch (callExp.Method.Name)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            case "Contains":
 | 
					                            case "Contains":
 | 
				
			||||||
                                //判断 in
 | 
					                                //判断 in //在各大 Provider AdoProvider 中已约定,500元素分割, 3空格\r\n4空格
 | 
				
			||||||
                                return $"({args1}) in {left}";
 | 
					                                return $"(({args1}) in {left.Replace(",   \r\n    \r\n", $") \r\n OR ({args1}) in (")})";
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user