From 0a3e173662832639a0c7cc02ef3895941b97672f Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Tue, 24 Sep 2019 21:54:43 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20Pgsql=20string[]=20?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=E8=A1=A8=E8=BE=BE=E5=BC=8F=20Contains=20?= =?UTF-8?q?=E7=BC=BA=E5=B0=91=E7=B1=BB=E5=9E=8B=E8=BD=AC=E6=8D=A2=E7=9A=84?= =?UTF-8?q?=20SQL=20=E8=AF=AD=E6=B3=95=E9=94=99=E8=AF=AF=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PostgreSQL/PostgreSQLExpression/OtherTest.cs | 1 + .../PostgreSQL/OdbcPostgreSQLExpression.cs | 8 +++++++- .../FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs | 8 +++++++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/OtherTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/OtherTest.cs index d1bbdd0d..f29fa7d3 100644 --- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/OtherTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/OtherTest.cs @@ -67,6 +67,7 @@ namespace FreeSql.Tests.PostgreSQLExpression var sql1 = select.Where(a => a.testFieldIntArray.Contains(1)).ToList(); var sql2 = select.Where(a => a.testFieldIntArray.Contains(1) == false).ToList(); + var sql121 = select.Where(a => a.testFieldStringArray.Contains("aaa") == false).ToList(); //in not in var sql111 = select.Where(a => new[] { 1, 2, 3 }.Contains(a.testFieldInt)).ToList(); diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs index 5eca4047..d610ba85 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs @@ -135,7 +135,13 @@ namespace FreeSql.Odbc.PostgreSQL if (left.StartsWith("(") || left.EndsWith(")")) return $"{right1} in {left}"; if (right1.StartsWith("(") || right1.EndsWith(")")) right1 = $"array[{right1.TrimStart('(').TrimEnd(')')}]"; - return $"({left} @> array[{right1}])"; + right1 = $"array[{right1}]"; + if (objExp != null) + { + var dbinfo = _common._orm.CodeFirst.GetDbInfo(objExp.Type); + if (dbinfo.HasValue) right1 = $"{right1}::{dbinfo.Value.dbtype}"; + } + return $"({left} @> {right1})"; case "Concat": if (left.StartsWith("(") || left.EndsWith(")")) left = $"array[{left.TrimStart('(').TrimEnd(')')}]"; var right2 = getExp(callExp.Arguments[argIndex]); diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs index 788f3ae2..6c203306 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs @@ -164,7 +164,13 @@ namespace FreeSql.PostgreSQL if (left.StartsWith("(") || left.EndsWith(")")) return $"{right1} in {left}"; if (right1.StartsWith("(") || right1.EndsWith(")")) right1 = $"array[{right1.TrimStart('(').TrimEnd(')')}]"; - return $"({left} @> array[{right1}])"; + right1 = $"array[{right1}]"; + if (objExp != null) + { + var dbinfo = _common._orm.CodeFirst.GetDbInfo(objExp.Type); + if (dbinfo.HasValue) right1 = $"{right1}::{dbinfo.Value.dbtype}"; + } + return $"({left} @> {right1})"; case "Concat": if (left.StartsWith("(") || left.EndsWith(")")) left = $"array[{left.TrimStart('(').TrimEnd(')')}]"; var right2 = getExp(callExp.Arguments[argIndex]);