From b1578f8cdc4c60d346ce9faf2e84aa009fe68527 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Fri, 5 Apr 2019 00:16:35 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=20=E8=A1=A8=E8=BE=BE?= =?UTF-8?q?=E5=BC=8F=E8=A7=A3=E6=9E=90=20Equals=20=E4=B8=BA=20=3D=20#28?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.Tests/MySql/MySqlExpression/StringTest.cs | 10 ++++++++++ FreeSql.Tests/Oracle/OracleExpression/StringTest.cs | 11 +++++++++++ .../PostgreSQL/PostgreSQLExpression/StringTest.cs | 11 +++++++++++ .../SqlServer/SqlServerExpression/StringTest.cs | 10 ++++++++++ FreeSql.Tests/Sqlite/SqliteExpression/StringTest.cs | 10 ++++++++++ FreeSql.Tests/g.cs | 4 ++-- FreeSql/Internal/CommonExpression.cs | 12 ++++++++++++ 7 files changed, 66 insertions(+), 2 deletions(-) diff --git a/FreeSql.Tests/MySql/MySqlExpression/StringTest.cs b/FreeSql.Tests/MySql/MySqlExpression/StringTest.cs index b4552933..32bf386f 100644 --- a/FreeSql.Tests/MySql/MySqlExpression/StringTest.cs +++ b/FreeSql.Tests/MySql/MySqlExpression/StringTest.cs @@ -32,6 +32,16 @@ namespace FreeSql.Tests.MySqlExpression { public List Types { get; set; } } + class TestEqualsGuid { + public Guid id { get; set; } + } + + [Fact] + public void Equals__() { + var list = new List(); + list.Add(select.Where(a => a.Title.Equals("aaa")).ToList()); + list.Add(g.sqlite.Select().Where(a => a.id.Equals(Guid.Empty)).ToList()); + } [Fact] public void Empty() { diff --git a/FreeSql.Tests/Oracle/OracleExpression/StringTest.cs b/FreeSql.Tests/Oracle/OracleExpression/StringTest.cs index f90f916f..0fb3456c 100644 --- a/FreeSql.Tests/Oracle/OracleExpression/StringTest.cs +++ b/FreeSql.Tests/Oracle/OracleExpression/StringTest.cs @@ -32,6 +32,17 @@ namespace FreeSql.Tests.OracleExpression { public List Types { get; set; } } + class TestEqualsGuid { + public Guid id { get; set; } + } + + [Fact] + public void Equals__() { + var list = new List(); + list.Add(select.Where(a => a.Title.Equals("aaa")).ToList()); + list.Add(g.oracle.Select().Where(a => a.id.Equals(Guid.Empty)).ToList()); + } + [Fact] public void Empty() { diff --git a/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/StringTest.cs b/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/StringTest.cs index 95a62a14..16ad0aee 100644 --- a/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/StringTest.cs +++ b/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/StringTest.cs @@ -32,6 +32,17 @@ namespace FreeSql.Tests.PostgreSQLExpression { public List Types { get; set; } } + class TestEqualsGuid { + public Guid id { get; set; } + } + + [Fact] + public void Equals__() { + var list = new List(); + list.Add(select.Where(a => a.Title.Equals("aaa")).ToList()); + list.Add(g.pgsql.Select().Where(a => a.id.Equals(Guid.Empty)).ToList()); + } + [Fact] public void Empty() { diff --git a/FreeSql.Tests/SqlServer/SqlServerExpression/StringTest.cs b/FreeSql.Tests/SqlServer/SqlServerExpression/StringTest.cs index a00658cd..1338612a 100644 --- a/FreeSql.Tests/SqlServer/SqlServerExpression/StringTest.cs +++ b/FreeSql.Tests/SqlServer/SqlServerExpression/StringTest.cs @@ -41,6 +41,16 @@ namespace FreeSql.Tests.SqlServerExpression { public List Types { get; set; } } + class TestEqualsGuid { + public Guid id { get; set; } + } + + [Fact] + public void Equals__() { + var list = new List(); + list.Add(select.Where(a => a.Title.Equals("aaa")).ToList()); + list.Add(_sqlserverFixture.SqlServer.Select().Where(a => a.id.Equals(Guid.Empty)).ToList()); + } [Fact] public void Empty() { diff --git a/FreeSql.Tests/Sqlite/SqliteExpression/StringTest.cs b/FreeSql.Tests/Sqlite/SqliteExpression/StringTest.cs index 2768c125..b8cc9920 100644 --- a/FreeSql.Tests/Sqlite/SqliteExpression/StringTest.cs +++ b/FreeSql.Tests/Sqlite/SqliteExpression/StringTest.cs @@ -32,6 +32,16 @@ namespace FreeSql.Tests.SqliteExpression { public List Types { get; set; } } + class TestEqualsGuid { + public Guid id { get; set; } + } + + [Fact] + public void Equals__() { + var list = new List(); + list.Add(select.Where(a => a.Title.Equals("aaa")).ToList()); + list.Add(g.sqlite.Select().Where(a => a.id.Equals(Guid.Empty)).ToList()); + } [Fact] public void Empty() { diff --git a/FreeSql.Tests/g.cs b/FreeSql.Tests/g.cs index 58746d18..9f247108 100644 --- a/FreeSql.Tests/g.cs +++ b/FreeSql.Tests/g.cs @@ -50,7 +50,7 @@ public class g { Console.WriteLine(traceLog); }) //监听SQL命令对象,在执行后 .Build()); - public static IFreeSql oracle = oracleLazy.Value; + public static IFreeSql oracle => oracleLazy.Value; static Lazy sqliteLazy = new Lazy(() => new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=|DataDirectory|\document.db;Attachs=xxxtb.db;Pooling=true;Max Pool Size=10") @@ -64,5 +64,5 @@ public class g { Console.WriteLine(traceLog); }) //监听SQL命令对象,在执行后 .Build()); - public static IFreeSql sqlite = sqliteLazy.Value; + public static IFreeSql sqlite => sqliteLazy.Value; } diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index 91b6fc3c..040dd439 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -306,6 +306,18 @@ namespace FreeSql.Internal { return $"case when {ExpressionLambdaToSql(condExp.Test, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName, isDisableDiyParse, style)} then {ExpressionLambdaToSql(condExp.IfTrue, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName, isDisableDiyParse, style)} else {ExpressionLambdaToSql(condExp.IfFalse, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName, isDisableDiyParse, style)} end"; case ExpressionType.Call: var exp3 = exp as MethodCallExpression; + if (exp3.Method.Name == "Equals" && exp3.Object != null && exp3.Arguments.Count > 0) { + var tmptryoper = "="; + var tmpleft = ExpressionLambdaToSql(exp3.Object, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName, isDisableDiyParse, style); + var tmpright = ExpressionLambdaToSql(exp3.Arguments[0], _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName, isDisableDiyParse, style); + if (tmpleft == "NULL") { + var tmp33 = tmpright; + tmpright = tmpleft; + tmpleft = tmp33; + } + if (tmpright == "NULL") tmptryoper = " IS "; + return $"{tmpleft}{tmptryoper}{tmpright}"; + } var callType = exp3.Object?.Type ?? exp3.Method.DeclaringType; switch (callType.FullName) { case "System.String": return ExpressionLambdaToSqlCallString(exp3, _tables, _selectColumnMap, getSelectGroupingMapString, tbtype, isQuoteName, isDisableDiyParse, style);