diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml
index 4854f49c..132d875e 100644
--- a/FreeSql.DbContext/FreeSql.DbContext.xml
+++ b/FreeSql.DbContext/FreeSql.DbContext.xml
@@ -125,13 +125,6 @@
清空状态数据
-
-
- 根据 lambda 条件删除数据
-
-
-
-
添加
@@ -486,14 +479,5 @@
-
-
- 批量注入 Repository,可以参考代码自行调整
-
-
-
-
-
-
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlConnectorExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlConnectorExpression/StringTest.cs
index 967a0d3c..99f276bb 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlConnectorExpression/StringTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlConnectorExpression/StringTest.cs
@@ -75,6 +75,31 @@ WHERE (a.`Id` = {item.Id})", sql);
Assert.Equal(string.Format("{0}x{0}z-{1}{2}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title), item2.str2);
}
+ [Fact]
+ public void Format4()
+ {
+ //3 {} ʱArguments Ƿֿ
+ //4 {} ʱArguments[1] ֻܽȻ NewArray []
+ var item = g.mysql.GetRepository().Insert(new Topic { Clicks = 101, Title = "й101", CreateTime = DateTime.Parse("2020-7-5") });
+ var sql = select.WhereDynamic(item).ToSql(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.Equal($@"SELECT concat('x',ifnull((a.`Id` + 1), ''),'z-',ifnull(date_format(a.`CreateTime`,'%Y%m'), ''),'',ifnull(a.`Title`, ''),'',ifnull(a.`Title`, ''),'') as1, concat('',ifnull((a.`Id` + 1), ''),'x',ifnull((a.`Id` + 1), ''),'z-',ifnull(date_format(a.`CreateTime`,'%Y%m'), ''),'',ifnull(a.`Title`, ''),'',ifnull(a.`Title`, ''),'') as2
+FROM `tb_topic` a
+WHERE (a.`Id` = {item.Id})", sql);
+
+ var item2 = select.WhereDynamic(item).First(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.NotNull(item2);
+ Assert.Equal($"x{item.Id + 1}z-{item.CreateTime.ToString("yyyyMM")}{item.Title}{item.Title}", item2.str);
+ Assert.Equal(string.Format("{0}x{0}z-{1}{2}{3}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title, item.Title), item2.str2);
+ }
+
[Fact]
public void Empty()
{
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengExpression/StringTest.cs
index 21bf1473..fd7682f3 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengExpression/StringTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengExpression/StringTest.cs
@@ -73,6 +73,31 @@ WHERE (a.""ID"" = {item.Id})", sql);
Assert.Equal(string.Format("{0}x{0}z-{1}{2}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title), item2.str2);
}
+ [Fact]
+ public void Format4()
+ {
+ //3 {} ʱArguments Ƿֿ
+ //4 {} ʱArguments[1] ֻܽȻ NewArray []
+ var item = g.dameng.GetRepository().Insert(new Topic { Clicks = 101, Title = "й101", CreateTime = DateTime.Parse("2020-7-5") });
+ var sql = select.WhereDynamic(item).ToSql(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.Equal($@"SELECT 'x'||nvl((a.""ID"" + 1), '')||'z-'||nvl(to_char(a.""CREATETIME"",'YYYYMM'), '')||''||nvl(a.""TITLE"", '')||''||nvl(a.""TITLE"", '')||'' as1, ''||nvl((a.""ID"" + 1), '')||'x'||nvl((a.""ID"" + 1), '')||'z-'||nvl(to_char(a.""CREATETIME"",'YYYYMM'), '')||''||nvl(a.""TITLE"", '')||''||nvl(a.""TITLE"", '')||'' as2
+FROM ""TB_TOPIC"" a
+WHERE (a.""ID"" = {item.Id})", sql);
+
+ var item2 = select.WhereDynamic(item).First(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.NotNull(item2);
+ Assert.Equal($"x{item.Id + 1}z-{item.CreateTime.ToString("yyyyMM")}{item.Title}{item.Title}", item2.str);
+ Assert.Equal(string.Format("{0}x{0}z-{1}{2}{3}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title, item.Title), item2.str2);
+ }
+
[Fact]
public void Empty()
{
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/KingbaseES/KingbaseESExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/KingbaseES/KingbaseESExpression/StringTest.cs
index f686574a..37b61702 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/KingbaseES/KingbaseESExpression/StringTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/KingbaseES/KingbaseESExpression/StringTest.cs
@@ -73,6 +73,31 @@ WHERE (a.""ID"" = {item.Id})", sql);
Assert.Equal(string.Format("{0}x{0}z-{1}{2}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title), item2.str2);
}
+ [Fact]
+ public void Format4()
+ {
+ //3 {} ʱArguments Ƿֿ
+ //4 {} ʱArguments[1] ֻܽȻ NewArray []
+ var item = g.kingbaseES.GetRepository().Insert(new Topic { Clicks = 101, Title = "й101", CreateTime = DateTime.Parse("2020-7-5") });
+ var sql = select.WhereDynamic(item).ToSql(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.Equal($@"SELECT 'x'||coalesce(((a.""ID"" + 1))::text, '')||'z-'||coalesce(to_char((a.""CREATETIME"")::timestamp,'YYYYMM'), '')||''||coalesce(a.""TITLE"", '')||''||coalesce(a.""TITLE"", '')||'' as1, ''||coalesce(((a.""ID"" + 1))::text, '')||'x'||coalesce(((a.""ID"" + 1))::text, '')||'z-'||coalesce(to_char((a.""CREATETIME"")::timestamp,'YYYYMM'), '')||''||coalesce(a.""TITLE"", '')||''||coalesce(a.""TITLE"", '')||'' as2
+FROM ""TB_TOPIC"" a
+WHERE (a.""ID"" = {item.Id})", sql);
+
+ var item2 = select.WhereDynamic(item).First(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.NotNull(item2);
+ Assert.Equal($"x{item.Id + 1}z-{item.CreateTime.ToString("yyyyMM")}{item.Title}{item.Title}", item2.str);
+ Assert.Equal(string.Format("{0}x{0}z-{1}{2}{3}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title, item.Title), item2.str2);
+ }
+
[Fact]
public void Empty()
{
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlExpression/StringTest.cs
index 6696908e..de5d5cc9 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlExpression/StringTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlExpression/StringTest.cs
@@ -75,6 +75,31 @@ WHERE (a.`Id` = {item.Id})", sql);
Assert.Equal(string.Format("{0}x{0}z-{1}{2}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title), item2.str2);
}
+ [Fact]
+ public void Format4()
+ {
+ //3 {} ʱArguments Ƿֿ
+ //4 {} ʱArguments[1] ֻܽȻ NewArray []
+ var item = g.mysql.GetRepository().Insert(new Topic { Clicks = 101, Title = "й101", CreateTime = DateTime.Parse("2020-7-5") });
+ var sql = select.WhereDynamic(item).ToSql(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.Equal($@"SELECT concat('x',ifnull((a.`Id` + 1), ''),'z-',ifnull(date_format(a.`CreateTime`,'%Y%m'), ''),'',ifnull(a.`Title`, ''),'',ifnull(a.`Title`, ''),'') as1, concat('',ifnull((a.`Id` + 1), ''),'x',ifnull((a.`Id` + 1), ''),'z-',ifnull(date_format(a.`CreateTime`,'%Y%m'), ''),'',ifnull(a.`Title`, ''),'',ifnull(a.`Title`, ''),'') as2
+FROM `tb_topic` a
+WHERE (a.`Id` = {item.Id})", sql);
+
+ var item2 = select.WhereDynamic(item).First(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.NotNull(item2);
+ Assert.Equal($"x{item.Id + 1}z-{item.CreateTime.ToString("yyyyMM")}{item.Title}{item.Title}", item2.str);
+ Assert.Equal(string.Format("{0}x{0}z-{1}{2}{3}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title, item.Title), item2.str2);
+ }
+
[Fact]
public void Empty()
{
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleExpression/StringTest.cs
index 10dac97a..d5078378 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleExpression/StringTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleExpression/StringTest.cs
@@ -73,6 +73,31 @@ WHERE (a.""ID"" = {item.Id})", sql);
Assert.Equal(string.Format("{0}x{0}z-{1}{2}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title), item2.str2);
}
+ [Fact]
+ public void Format4()
+ {
+ //3 {} ʱArguments Ƿֿ
+ //4 {} ʱArguments[1] ֻܽȻ NewArray []
+ var item = g.oracle.GetRepository().Insert(new Topic { Clicks = 101, Title = "й101", CreateTime = DateTime.Parse("2020-7-5") });
+ var sql = select.WhereDynamic(item).ToSql(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.Equal($@"SELECT 'x'||nvl((a.""ID"" + 1), '')||'z-'||nvl(to_char(a.""CREATETIME"",'YYYYMM'), '')||''||nvl(a.""TITLE"", '')||''||nvl(a.""TITLE"", '')||'' as1, ''||nvl((a.""ID"" + 1), '')||'x'||nvl((a.""ID"" + 1), '')||'z-'||nvl(to_char(a.""CREATETIME"",'YYYYMM'), '')||''||nvl(a.""TITLE"", '')||''||nvl(a.""TITLE"", '')||'' as2
+FROM ""TB_TOPIC"" a
+WHERE (a.""ID"" = {item.Id})", sql);
+
+ var item2 = select.WhereDynamic(item).First(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.NotNull(item2);
+ Assert.Equal($"x{item.Id + 1}z-{item.CreateTime.ToString("yyyyMM")}{item.Title}{item.Title}", item2.str);
+ Assert.Equal(string.Format("{0}x{0}z-{1}{2}{3}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title, item.Title), item2.str2);
+ }
+
[Fact]
public void Empty()
{
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLExpression/StringTest.cs
index a189c1d2..f8fec850 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLExpression/StringTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLExpression/StringTest.cs
@@ -73,6 +73,31 @@ WHERE (a.""id"" = {item.Id})", sql);
Assert.Equal(string.Format("{0}x{0}z-{1}{2}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title), item2.str2);
}
+ [Fact]
+ public void Format4()
+ {
+ //3 {} ʱArguments Ƿֿ
+ //4 {} ʱArguments[1] ֻܽȻ NewArray []
+ var item = g.pgsql.GetRepository().Insert(new Topic { Clicks = 101, Title = "й101", CreateTime = DateTime.Parse("2020-7-5") });
+ var sql = select.WhereDynamic(item).ToSql(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.Equal($@"SELECT 'x'||coalesce(((a.""id"" + 1))::text, '')||'z-'||coalesce(to_char((a.""createtime"")::timestamp,'YYYYMM'), '')||''||coalesce(a.""title"", '')||''||coalesce(a.""title"", '')||'' as1, ''||coalesce(((a.""id"" + 1))::text, '')||'x'||coalesce(((a.""id"" + 1))::text, '')||'z-'||coalesce(to_char((a.""createtime"")::timestamp,'YYYYMM'), '')||''||coalesce(a.""title"", '')||''||coalesce(a.""title"", '')||'' as2
+FROM ""tb_topic"" a
+WHERE (a.""id"" = {item.Id})", sql);
+
+ var item2 = select.WhereDynamic(item).First(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.NotNull(item2);
+ Assert.Equal($"x{item.Id + 1}z-{item.CreateTime.ToString("yyyyMM")}{item.Title}{item.Title}", item2.str);
+ Assert.Equal(string.Format("{0}x{0}z-{1}{2}{3}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title, item.Title), item2.str2);
+ }
+
[Fact]
public void Empty()
{
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerExpression/StringTest.cs
index 97cd6e1d..8f23765d 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerExpression/StringTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerExpression/StringTest.cs
@@ -74,6 +74,31 @@ WHERE (a.[Id] = {item.Id})", sql);
Assert.Equal(string.Format("{0}x{0}z-{1}{2}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title), item2.str2);
}
+ [Fact]
+ public void Format4()
+ {
+ //3 {} ʱArguments Ƿֿ
+ //4 {} ʱArguments[1] ֻܽȻ NewArray []
+ var item = g.sqlserver.GetRepository().Insert(new Topic { Clicks = 101, Title = "й101", CreateTime = DateTime.Parse("2020-7-5") });
+ var sql = select.WhereDynamic(item).ToSql(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.Equal($@"SELECT N'x'+isnull(cast((a.[Id] + 1) as varchar), '')+N'z-'+isnull(substring(convert(char(8), cast(a.[CreateTime] as datetime), 112), 1, 6), '')+N''+isnull(a.[Title], '')+N''+isnull(a.[Title], '')+N'' as1, N''+isnull(cast((a.[Id] + 1) as varchar), '')+N'x'+isnull(cast((a.[Id] + 1) as varchar), '')+N'z-'+isnull(substring(convert(char(8), cast(a.[CreateTime] as datetime), 112), 1, 6), '')+N''+isnull(a.[Title], '')+N''+isnull(a.[Title], '')+N'' as2
+FROM [tb_topic] a
+WHERE (a.[Id] = {item.Id})", sql);
+
+ var item2 = select.WhereDynamic(item).First(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.NotNull(item2);
+ Assert.Equal($"x{item.Id + 1}z-{item.CreateTime.ToString("yyyyMM")}{item.Title}{item.Title}", item2.str);
+ Assert.Equal(string.Format("{0}x{0}z-{1}{2}{3}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title, item.Title), item2.str2);
+ }
+
[Fact]
public void Empty()
{
diff --git a/FreeSql.Tests/FreeSql.Tests/Dameng/DamengExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests/Dameng/DamengExpression/StringTest.cs
index 93789c17..0ac24166 100644
--- a/FreeSql.Tests/FreeSql.Tests/Dameng/DamengExpression/StringTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/Dameng/DamengExpression/StringTest.cs
@@ -73,6 +73,31 @@ WHERE (a.""ID"" = {item.Id})", sql);
Assert.Equal(string.Format("{0}x{0}z-{1}{2}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title), item2.str2);
}
+ [Fact]
+ public void Format4()
+ {
+ //3 {} ʱArguments Ƿֿ
+ //4 {} ʱArguments[1] ֻܽȻ NewArray []
+ var item = g.dameng.GetRepository().Insert(new Topic { Clicks = 101, Title = "й101", CreateTime = DateTime.Parse("2020-7-5") });
+ var sql = select.WhereDynamic(item).ToSql(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.Equal($@"SELECT 'x'||nvl((a.""ID"" + 1), '')||'z-'||nvl(to_char(a.""CREATETIME"",'YYYYMM'), '')||''||nvl(a.""TITLE"", '')||''||nvl(a.""TITLE"", '')||'' as1, ''||nvl((a.""ID"" + 1), '')||'x'||nvl((a.""ID"" + 1), '')||'z-'||nvl(to_char(a.""CREATETIME"",'YYYYMM'), '')||''||nvl(a.""TITLE"", '')||''||nvl(a.""TITLE"", '')||'' as2
+FROM ""TB_TOPIC"" a
+WHERE (a.""ID"" = {item.Id})", sql);
+
+ var item2 = select.WhereDynamic(item).First(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.NotNull(item2);
+ Assert.Equal($"x{item.Id + 1}z-{item.CreateTime.ToString("yyyyMM")}{item.Title}{item.Title}", item2.str);
+ Assert.Equal(string.Format("{0}x{0}z-{1}{2}{3}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title, item.Title), item2.str2);
+ }
+
[Fact]
public void Empty()
{
diff --git a/FreeSql.Tests/FreeSql.Tests/MsAccess/MsAccessExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests/MsAccess/MsAccessExpression/StringTest.cs
index 5940417e..7db32843 100644
--- a/FreeSql.Tests/FreeSql.Tests/MsAccess/MsAccessExpression/StringTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/MsAccess/MsAccessExpression/StringTest.cs
@@ -73,6 +73,31 @@ WHERE (a.[Id] = {item.Id})", sql);
Assert.Equal(string.Format("{0}x{0}z-{1}{2}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title), item2.str2);
}
+ [Fact]
+ public void Format4()
+ {
+ //3 {} ʱArguments Ƿֿ
+ //4 {} ʱArguments[1] ֻܽȻ NewArray []
+ var item = g.msaccess.GetRepository().Insert(new Topic { Clicks = 101, Title = "й101", CreateTime = DateTime.Parse("2020-7-5") });
+ var sql = select.WhereDynamic(item).ToSql(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.Equal($@"SELECT 'x'+iif(isnull(cstr((a.[Id] + 1))), '', cstr((a.[Id] + 1)))+'z-'+iif(isnull(format(a.[CreateTime],'yyyyMM')), '', format(a.[CreateTime],'yyyyMM'))+''+iif(isnull(a.[Title]), '', a.[Title])+''+iif(isnull(a.[Title]), '', a.[Title])+'' as as1, ''+iif(isnull(cstr((a.[Id] + 1))), '', cstr((a.[Id] + 1)))+'x'+iif(isnull(cstr((a.[Id] + 1))), '', cstr((a.[Id] + 1)))+'z-'+iif(isnull(format(a.[CreateTime],'yyyyMM')), '', format(a.[CreateTime],'yyyyMM'))+''+iif(isnull(a.[Title]), '', a.[Title])+''+iif(isnull(a.[Title]), '', a.[Title])+'' as as2
+FROM [tb_topic] a
+WHERE (a.[Id] = {item.Id})", sql);
+
+ var item2 = select.WhereDynamic(item).First(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.NotNull(item2);
+ Assert.Equal($"x{item.Id + 1}z-{item.CreateTime.ToString("yyyyMM")}{item.Title}{item.Title}", item2.str);
+ Assert.Equal(string.Format("{0}x{0}z-{1}{2}{3}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title, item.Title), item2.str2);
+ }
+
[Fact]
public void Empty()
{
diff --git a/FreeSql.Tests/FreeSql.Tests/MySql/MySqlExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests/MySql/MySqlExpression/StringTest.cs
index ad563009..cb7f4e17 100644
--- a/FreeSql.Tests/FreeSql.Tests/MySql/MySqlExpression/StringTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/MySql/MySqlExpression/StringTest.cs
@@ -75,6 +75,31 @@ WHERE (a.`Id` = {item.Id})", sql);
Assert.Equal(string.Format("{0}x{0}z-{1}{2}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title), item2.str2);
}
+ [Fact]
+ public void Format4()
+ {
+ //3 {} ʱArguments Ƿֿ
+ //4 {} ʱArguments[1] ֻܽȻ NewArray []
+ var item = g.mysql.GetRepository().Insert(new Topic { Clicks = 101, Title = "й101", CreateTime = DateTime.Parse("2020-7-5") });
+ var sql = select.WhereDynamic(item).ToSql(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.Equal($@"SELECT concat('x',ifnull((a.`Id` + 1), ''),'z-',ifnull(date_format(a.`CreateTime`,'%Y%m'), ''),'',ifnull(a.`Title`, ''),'',ifnull(a.`Title`, ''),'') as1, concat('',ifnull((a.`Id` + 1), ''),'x',ifnull((a.`Id` + 1), ''),'z-',ifnull(date_format(a.`CreateTime`,'%Y%m'), ''),'',ifnull(a.`Title`, ''),'',ifnull(a.`Title`, ''),'') as2
+FROM `tb_topic` a
+WHERE (a.`Id` = {item.Id})", sql);
+
+ var item2 = select.WhereDynamic(item).First(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.NotNull(item2);
+ Assert.Equal($"x{item.Id + 1}z-{item.CreateTime.ToString("yyyyMM")}{item.Title}{item.Title}", item2.str);
+ Assert.Equal(string.Format("{0}x{0}z-{1}{2}{3}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title, item.Title), item2.str2);
+ }
+
[Fact]
public void Empty()
{
diff --git a/FreeSql.Tests/FreeSql.Tests/Oracle/OracleExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests/Oracle/OracleExpression/StringTest.cs
index d5e7dbcc..6a63b551 100644
--- a/FreeSql.Tests/FreeSql.Tests/Oracle/OracleExpression/StringTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/Oracle/OracleExpression/StringTest.cs
@@ -73,6 +73,31 @@ WHERE (a.""ID"" = {item.Id})", sql);
Assert.Equal(string.Format("{0}x{0}z-{1}{2}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title), item2.str2);
}
+ [Fact]
+ public void Format4()
+ {
+ //3 {} ʱArguments Ƿֿ
+ //4 {} ʱArguments[1] ֻܽȻ NewArray []
+ var item = g.oracle.GetRepository().Insert(new Topic { Clicks = 101, Title = "й101", CreateTime = DateTime.Parse("2020-7-5") });
+ var sql = select.WhereDynamic(item).ToSql(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.Equal($@"SELECT 'x'||nvl((a.""ID"" + 1), '')||'z-'||nvl(to_char(a.""CREATETIME"",'YYYYMM'), '')||''||nvl(a.""TITLE"", '')||''||nvl(a.""TITLE"", '')||'' as1, ''||nvl((a.""ID"" + 1), '')||'x'||nvl((a.""ID"" + 1), '')||'z-'||nvl(to_char(a.""CREATETIME"",'YYYYMM'), '')||''||nvl(a.""TITLE"", '')||''||nvl(a.""TITLE"", '')||'' as2
+FROM ""TB_TOPIC"" a
+WHERE (a.""ID"" = {item.Id})", sql);
+
+ var item2 = select.WhereDynamic(item).First(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.NotNull(item2);
+ Assert.Equal($"x{item.Id + 1}z-{item.CreateTime.ToString("yyyyMM")}{item.Title}{item.Title}", item2.str);
+ Assert.Equal(string.Format("{0}x{0}z-{1}{2}{3}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title, item.Title), item2.str2);
+ }
+
[Fact]
public void Empty()
{
diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/StringTest.cs
index e8701a56..1a284e3b 100644
--- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/StringTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/StringTest.cs
@@ -73,6 +73,31 @@ WHERE (a.""id"" = {item.Id})", sql);
Assert.Equal(string.Format("{0}x{0}z-{1}{2}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title), item2.str2);
}
+ [Fact]
+ public void Format4()
+ {
+ //3 {} ʱArguments Ƿֿ
+ //4 {} ʱArguments[1] ֻܽȻ NewArray []
+ var item = g.pgsql.GetRepository().Insert(new Topic { Clicks = 101, Title = "й101", CreateTime = DateTime.Parse("2020-7-5") });
+ var sql = select.WhereDynamic(item).ToSql(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.Equal($@"SELECT 'x'||coalesce(((a.""id"" + 1))::text, '')||'z-'||coalesce(to_char((a.""createtime"")::timestamp,'YYYYMM'), '')||''||coalesce(a.""title"", '')||''||coalesce(a.""title"", '')||'' as1, ''||coalesce(((a.""id"" + 1))::text, '')||'x'||coalesce(((a.""id"" + 1))::text, '')||'z-'||coalesce(to_char((a.""createtime"")::timestamp,'YYYYMM'), '')||''||coalesce(a.""title"", '')||''||coalesce(a.""title"", '')||'' as2
+FROM ""tb_topic"" a
+WHERE (a.""id"" = {item.Id})", sql);
+
+ var item2 = select.WhereDynamic(item).First(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.NotNull(item2);
+ Assert.Equal($"x{item.Id + 1}z-{item.CreateTime.ToString("yyyyMM")}{item.Title}{item.Title}", item2.str);
+ Assert.Equal(string.Format("{0}x{0}z-{1}{2}{3}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title, item.Title), item2.str2);
+ }
+
[Fact]
public void Empty()
{
diff --git a/FreeSql.Tests/FreeSql.Tests/ShenTong/ShenTongExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests/ShenTong/ShenTongExpression/StringTest.cs
index 0e263375..55a89bfa 100644
--- a/FreeSql.Tests/FreeSql.Tests/ShenTong/ShenTongExpression/StringTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/ShenTong/ShenTongExpression/StringTest.cs
@@ -73,6 +73,31 @@ WHERE (a.""ID"" = {item.Id})", sql);
Assert.Equal(string.Format("{0}x{0}z-{1}{2}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title), item2.str2);
}
+ [Fact]
+ public void Format4()
+ {
+ //3 {} ʱArguments Ƿֿ
+ //4 {} ʱArguments[1] ֻܽȻ NewArray []
+ var item = g.shentong.GetRepository().Insert(new Topic { Clicks = 101, Title = "й101", CreateTime = DateTime.Parse("2020-7-5") });
+ var sql = select.WhereDynamic(item).ToSql(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.Equal($@"SELECT 'x'||coalesce((a.""ID"" + 1), '')||'z-'||coalesce(to_char((a.""CREATETIME"")::timestamp,'YYYYMM'), '')||''||coalesce(a.""TITLE"", '')||''||coalesce(a.""TITLE"", '')||'' as1, ''||coalesce((a.""ID"" + 1), '')||'x'||coalesce((a.""ID"" + 1), '')||'z-'||coalesce(to_char((a.""CREATETIME"")::timestamp,'YYYYMM'), '')||''||coalesce(a.""TITLE"", '')||''||coalesce(a.""TITLE"", '')||'' as2
+FROM ""TB_TOPIC"" a
+WHERE (a.""ID"" = {item.Id})", sql);
+
+ var item2 = select.WhereDynamic(item).First(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.NotNull(item2);
+ Assert.Equal($"x{item.Id + 1}z-{item.CreateTime.ToString("yyyyMM")}{item.Title}{item.Title}", item2.str);
+ Assert.Equal(string.Format("{0}x{0}z-{1}{2}{3}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title, item.Title), item2.str2);
+ }
+
[Fact]
public void Empty()
{
diff --git a/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerExpression/StringTest.cs
index 425c02e3..3e36a8cf 100644
--- a/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerExpression/StringTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerExpression/StringTest.cs
@@ -88,6 +88,31 @@ WHERE (a.[Id] = {item.Id})", sql);
Assert.Equal(string.Format("{0}x{0}z-{1}{2}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title), item2.str2);
}
+ [Fact]
+ public void Format4()
+ {
+ //3 {} ʱArguments Ƿֿ
+ //4 {} ʱArguments[1] ֻܽȻ NewArray []
+ var item = g.sqlserver.GetRepository().Insert(new Topic { Clicks = 101, Title = "й101", CreateTime = DateTime.Parse("2020-7-5") });
+ var sql = select.WhereDynamic(item).ToSql(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.Equal($@"SELECT N'x'+isnull(cast((a.[Id] + 1) as varchar), '')+N'z-'+isnull(substring(convert(char(8), cast(a.[CreateTime] as datetime), 112), 1, 6), '')+N''+isnull(a.[Title], '')+N''+isnull(a.[Title], '')+N'' as1, N''+isnull(cast((a.[Id] + 1) as varchar), '')+N'x'+isnull(cast((a.[Id] + 1) as varchar), '')+N'z-'+isnull(substring(convert(char(8), cast(a.[CreateTime] as datetime), 112), 1, 6), '')+N''+isnull(a.[Title], '')+N''+isnull(a.[Title], '')+N'' as2
+FROM [tb_topic] a
+WHERE (a.[Id] = {item.Id})", sql);
+
+ var item2 = select.WhereDynamic(item).First(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.NotNull(item2);
+ Assert.Equal($"x{item.Id + 1}z-{item.CreateTime.ToString("yyyyMM")}{item.Title}{item.Title}", item2.str);
+ Assert.Equal(string.Format("{0}x{0}z-{1}{2}{3}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title, item.Title), item2.str2);
+ }
+
[Fact]
public void Empty()
{
diff --git a/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteExpression/StringTest.cs
index be68623e..bb4dcf58 100644
--- a/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteExpression/StringTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteExpression/StringTest.cs
@@ -73,6 +73,31 @@ WHERE (a.""Id"" = {item.Id})", sql);
Assert.Equal(string.Format("{0}x{0}z-{1}{2}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title), item2.str2);
}
+ [Fact]
+ public void Format4()
+ {
+ //3 {} ʱArguments Ƿֿ
+ //4 {} ʱArguments[1] ֻܽȻ NewArray []
+ var item = g.sqlite.GetRepository().Insert(new Topic { Clicks = 101, Title = "й101", CreateTime = DateTime.Parse("2020-7-5") });
+ var sql = select.WhereDynamic(item).ToSql(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.Equal($@"SELECT 'x'||ifnull((a.""Id"" + 1), '')||'z-'||ifnull(strftime('%Y%m',a.""CreateTime""), '')||''||ifnull(a.""Title"", '')||''||ifnull(a.""Title"", '')||'' as1, ''||ifnull((a.""Id"" + 1), '')||'x'||ifnull((a.""Id"" + 1), '')||'z-'||ifnull(strftime('%Y%m',a.""CreateTime""), '')||''||ifnull(a.""Title"", '')||''||ifnull(a.""Title"", '')||'' as2
+FROM ""tb_topic"" a
+WHERE (a.""Id"" = {item.Id})", sql);
+
+ var item2 = select.WhereDynamic(item).First(a => new
+ {
+ str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
+ str2 = string.Format("{0}x{0}z-{1}{2}{3}", a.Id + 1, a.CreateTime.ToString("yyyyMM"), a.Title, a.Title)
+ });
+ Assert.NotNull(item2);
+ Assert.Equal($"x{item.Id + 1}z-{item.CreateTime.ToString("yyyyMM")}{item.Title}{item.Title}", item2.str);
+ Assert.Equal(string.Format("{0}x{0}z-{1}{2}{3}", item.Id + 1, item.CreateTime.ToString("yyyyMM"), item.Title, item.Title), item2.str2);
+ }
+
[Fact]
public void Empty()
{
diff --git a/Providers/FreeSql.Provider.Dameng/DamengExpression.cs b/Providers/FreeSql.Provider.Dameng/DamengExpression.cs
index 145a843b..aa59c52a 100644
--- a/Providers/FreeSql.Provider.Dameng/DamengExpression.cs
+++ b/Providers/FreeSql.Provider.Dameng/DamengExpression.cs
@@ -252,7 +252,11 @@ namespace FreeSql.Dameng
return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null);
case "Format":
if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception($"未实现函数表达式 {exp} 解析,参数 {exp.Arguments[0]} 必须为常量");
- var expArgs = exp.Arguments.Where((a, z) => z > 0).Select(a => $"'||{_common.IsNull(ExpressionLambdaToSql(a, tsc), "''")}||'").ToArray();
+ var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ?
+ (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0);
+ //3个 {} 时,Arguments 解析出来是分开的
+ //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray []
+ var expArgs = expArgsHack.Select(a => $"'||{_common.IsNull(ExpressionLambdaToSql(a, tsc), "''")}||'").ToArray();
return string.Format(ExpressionLambdaToSql(exp.Arguments[0], tsc), expArgs);
}
}
diff --git a/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs b/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs
index 5ba654dd..7f075618 100644
--- a/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs
+++ b/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs
@@ -222,7 +222,11 @@ namespace FreeSql.MsAccess
return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), exp.Arguments.Select(a => a.Type).ToArray());
case "Format":
if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception($"未实现函数表达式 {exp} 解析,参数 {exp.Arguments[0]} 必须为常量");
- var expArgs = exp.Arguments.Where((a, z) => z > 0).Select(a =>
+ var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ?
+ (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0);
+ //3个 {} 时,Arguments 解析出来是分开的
+ //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray []
+ var expArgs = expArgsHack.Select(a =>
{
var asql = ((a as UnaryExpression)?.Operand.Type ?? a.Type) == typeof(string) ? $"{ExpressionLambdaToSql(a, tsc)}" : $"cstr({ExpressionLambdaToSql(a, tsc)})";
return $"'+{_common.IsNull(asql, "''")}+'";
diff --git a/Providers/FreeSql.Provider.MySql/MySqlExpression.cs b/Providers/FreeSql.Provider.MySql/MySqlExpression.cs
index 3365aacb..8db4fbde 100644
--- a/Providers/FreeSql.Provider.MySql/MySqlExpression.cs
+++ b/Providers/FreeSql.Provider.MySql/MySqlExpression.cs
@@ -251,7 +251,11 @@ namespace FreeSql.MySql
case "Format":
if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception($"未实现函数表达式 {exp} 解析,参数 {exp.Arguments[0]} 必须为常量");
if (exp.Arguments.Count == 1) return ExpressionLambdaToSql(exp.Arguments[0], tsc);
- var expArgs = exp.Arguments.Where((a, z) => z > 0).Select(a => $"',{_common.IsNull(ExpressionLambdaToSql(a, tsc), "''")},'").ToArray();
+ var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ?
+ (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0);
+ //3个 {} 时,Arguments 解析出来是分开的
+ //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray []
+ var expArgs = expArgsHack.Select(a => $"',{_common.IsNull(ExpressionLambdaToSql(a, tsc), "''")},'").ToArray();
return $"concat({string.Format(ExpressionLambdaToSql(exp.Arguments[0], tsc), expArgs)})";
}
}
diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengExpression.cs b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengExpression.cs
index d5cbb4cb..4f1b6a13 100644
--- a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengExpression.cs
+++ b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengExpression.cs
@@ -252,7 +252,11 @@ namespace FreeSql.Odbc.Dameng
return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null);
case "Format":
if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception($"未实现函数表达式 {exp} 解析,参数 {exp.Arguments[0]} 必须为常量");
- var expArgs = exp.Arguments.Where((a, z) => z > 0).Select(a => $"'||{_common.IsNull(ExpressionLambdaToSql(a, tsc), "''")}||'").ToArray();
+ var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ?
+ (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0);
+ //3个 {} 时,Arguments 解析出来是分开的
+ //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray []
+ var expArgs = expArgsHack.Select(a => $"'||{_common.IsNull(ExpressionLambdaToSql(a, tsc), "''")}||'").ToArray();
return string.Format(ExpressionLambdaToSql(exp.Arguments[0], tsc), expArgs);
}
}
diff --git a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESExpression.cs b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESExpression.cs
index ad1c40da..622bb403 100644
--- a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESExpression.cs
+++ b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESExpression.cs
@@ -316,7 +316,11 @@ namespace FreeSql.Odbc.KingbaseES
return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null);
case "Format":
if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception($"未实现函数表达式 {exp} 解析,参数 {exp.Arguments[0]} 必须为常量");
- var expArgs = exp.Arguments.Where((a, z) => z > 0).Select(a =>
+ var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ?
+ (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0);
+ //3个 {} 时,Arguments 解析出来是分开的
+ //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray []
+ var expArgs = expArgsHack.Select(a =>
{
var atype = (a as UnaryExpression)?.Operand.Type.NullableTypeOrThis() ?? a.Type.NullableTypeOrThis();
if (atype == typeof(string)) return $"'||{_common.IsNull(ExpressionLambdaToSql(a, tsc), "''")}||'";
diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs
index 128e750c..2225443a 100644
--- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs
+++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs
@@ -249,7 +249,11 @@ namespace FreeSql.Odbc.MySql
case "Format":
if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception($"未实现函数表达式 {exp} 解析,参数 {exp.Arguments[0]} 必须为常量");
if (exp.Arguments.Count == 1) return ExpressionLambdaToSql(exp.Arguments[0], tsc);
- var expArgs = exp.Arguments.Where((a, z) => z > 0).Select(a => $"',{_common.IsNull(ExpressionLambdaToSql(a, tsc), "''")},'").ToArray();
+ var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ?
+ (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0);
+ //3个 {} 时,Arguments 解析出来是分开的
+ //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray []
+ var expArgs = expArgsHack.Select(a => $"',{_common.IsNull(ExpressionLambdaToSql(a, tsc), "''")},'").ToArray();
return $"concat({string.Format(ExpressionLambdaToSql(exp.Arguments[0], tsc), expArgs)})";
}
}
diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs
index 7ed64b54..6526cf70 100644
--- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs
+++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs
@@ -252,7 +252,11 @@ namespace FreeSql.Odbc.Oracle
return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null);
case "Format":
if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception($"未实现函数表达式 {exp} 解析,参数 {exp.Arguments[0]} 必须为常量");
- var expArgs = exp.Arguments.Where((a, z) => z > 0).Select(a => $"'||{_common.IsNull(ExpressionLambdaToSql(a, tsc), "''")}||'").ToArray();
+ var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ?
+ (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0);
+ //3个 {} 时,Arguments 解析出来是分开的
+ //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray []
+ var expArgs = expArgsHack.Select(a => $"'||{_common.IsNull(ExpressionLambdaToSql(a, tsc), "''")}||'").ToArray();
return string.Format(ExpressionLambdaToSql(exp.Arguments[0], tsc), expArgs);
}
}
diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs
index c8ee191c..625f06d8 100644
--- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs
+++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs
@@ -338,7 +338,11 @@ namespace FreeSql.Odbc.PostgreSQL
return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null);
case "Format":
if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception($"未实现函数表达式 {exp} 解析,参数 {exp.Arguments[0]} 必须为常量");
- var expArgs = exp.Arguments.Where((a, z) => z > 0).Select(a =>
+ var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ?
+ (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0);
+ //3个 {} 时,Arguments 解析出来是分开的
+ //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray []
+ var expArgs = expArgsHack.Select(a =>
{
var atype = (a as UnaryExpression)?.Operand.Type.NullableTypeOrThis() ?? a.Type.NullableTypeOrThis();
if (atype == typeof(string)) return $"'||{_common.IsNull(ExpressionLambdaToSql(a, tsc), "''")}||'";
diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs
index c0aaa4e3..f9ff49cf 100644
--- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs
+++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs
@@ -261,7 +261,11 @@ namespace FreeSql.Odbc.SqlServer
var expArgs0 = ExpressionLambdaToSql(exp.Arguments[0], tsc);
if (exp.Arguments.Count == 1) return expArgs0;
var nchar = expArgs0.StartsWith("N'") ? "N" : "";
- var expArgs = exp.Arguments.Where((a, z) => z > 0).Select(a =>
+ var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ?
+ (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0);
+ //3个 {} 时,Arguments 解析出来是分开的
+ //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray []
+ var expArgs = expArgsHack.Select(a =>
{
var atype = (a as UnaryExpression)?.Operand.Type.NullableTypeOrThis() ?? a.Type.NullableTypeOrThis();
if (atype == typeof(string)) return $"'+{_common.IsNull(ExpressionLambdaToSql(a, tsc), "''")}+{nchar}'";
diff --git a/Providers/FreeSql.Provider.Oracle/OracleExpression.cs b/Providers/FreeSql.Provider.Oracle/OracleExpression.cs
index 2c9f768b..25233bca 100644
--- a/Providers/FreeSql.Provider.Oracle/OracleExpression.cs
+++ b/Providers/FreeSql.Provider.Oracle/OracleExpression.cs
@@ -252,7 +252,11 @@ namespace FreeSql.Oracle
return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null);
case "Format":
if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception($"未实现函数表达式 {exp} 解析,参数 {exp.Arguments[0]} 必须为常量");
- var expArgs = exp.Arguments.Where((a, z) => z > 0).Select(a => $"'||{_common.IsNull(ExpressionLambdaToSql(a, tsc), "''")}||'").ToArray();
+ var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ?
+ (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0);
+ //3个 {} 时,Arguments 解析出来是分开的
+ //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray []
+ var expArgs = expArgsHack.Select(a => $"'||{_common.IsNull(ExpressionLambdaToSql(a, tsc), "''")}||'").ToArray();
return string.Format(ExpressionLambdaToSql(exp.Arguments[0], tsc), expArgs);
}
}
diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs
index a65ff443..cc445d6f 100644
--- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs
+++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs
@@ -369,7 +369,11 @@ namespace FreeSql.PostgreSQL
return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null);
case "Format":
if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception($"未实现函数表达式 {exp} 解析,参数 {exp.Arguments[0]} 必须为常量");
- var expArgs = exp.Arguments.Where((a, z) => z > 0).Select(a =>
+ var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ?
+ (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0);
+ //3个 {} 时,Arguments 解析出来是分开的
+ //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray []
+ var expArgs = expArgsHack.Select(a =>
{
var atype = (a as UnaryExpression)?.Operand.Type.NullableTypeOrThis() ?? a.Type.NullableTypeOrThis();
if (atype == typeof(string)) return $"'||{_common.IsNull(ExpressionLambdaToSql(a, tsc), "''")}||'";
diff --git a/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs b/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs
index 078128c9..00bf94d8 100644
--- a/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs
+++ b/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs
@@ -299,7 +299,11 @@ namespace FreeSql.ShenTong
return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null);
case "Format":
if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception($"未实现函数表达式 {exp} 解析,参数 {exp.Arguments[0]} 必须为常量");
- var expArgs = exp.Arguments.Where((a, z) => z > 0).Select(a => $"'||{_common.IsNull(ExpressionLambdaToSql(a, tsc), "''")}||'").ToArray();
+ var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ?
+ (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0);
+ //3个 {} 时,Arguments 解析出来是分开的
+ //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray []
+ var expArgs = expArgsHack.Select(a => $"'||{_common.IsNull(ExpressionLambdaToSql(a, tsc), "''")}||'").ToArray();
return string.Format(ExpressionLambdaToSql(exp.Arguments[0], tsc), expArgs);
}
}
diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs
index 1e29c6db..c81e40aa 100644
--- a/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs
+++ b/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs
@@ -260,7 +260,11 @@ namespace FreeSql.SqlServer
var expArgs0 = ExpressionLambdaToSql(exp.Arguments[0], tsc);
if (exp.Arguments.Count == 1) return expArgs0;
var nchar = expArgs0.StartsWith("N'") ? "N" : "";
- var expArgs = exp.Arguments.Where((a, z) => z > 0).Select(a =>
+ var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ?
+ (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0);
+ //3个 {} 时,Arguments 解析出来是分开的
+ //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray []
+ var expArgs = expArgsHack.Select(a =>
{
var atype = (a as UnaryExpression)?.Operand.Type.NullableTypeOrThis() ?? a.Type.NullableTypeOrThis();
if (atype == typeof(string)) return $"'+{_common.IsNull(ExpressionLambdaToSql(a, tsc), "''")}+{nchar}'";
diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs b/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs
index ba7f0093..18b5e4ad 100644
--- a/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs
+++ b/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs
@@ -248,7 +248,11 @@ namespace FreeSql.Sqlite
return _common.StringConcat(exp.Arguments.Select(a => getExp(a)).ToArray(), null);
case "Format":
if (exp.Arguments[0].NodeType != ExpressionType.Constant) throw new Exception($"未实现函数表达式 {exp} 解析,参数 {exp.Arguments[0]} 必须为常量");
- var expArgs = exp.Arguments.Where((a, z) => z > 0).Select(a => $"'||{_common.IsNull(ExpressionLambdaToSql(a, tsc), "''")}||'").ToArray();
+ var expArgsHack = exp.Arguments.Count == 2 && exp.Arguments[1].NodeType == ExpressionType.NewArrayInit ?
+ (exp.Arguments[1] as NewArrayExpression).Expressions : exp.Arguments.Where((a, z) => z > 0);
+ //3个 {} 时,Arguments 解析出来是分开的
+ //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray []
+ var expArgs = expArgsHack.Select(a => $"'||{_common.IsNull(ExpressionLambdaToSql(a, tsc), "''")}||'").ToArray();
return string.Format(ExpressionLambdaToSql(exp.Arguments[0], tsc), expArgs);
}
}