From a5e657385185db37752923fc0f9aca901fd2ec18 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Thu, 19 Mar 2020 22:46:40 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E5=A2=9E=E5=8A=A0=20Pgsql=20JToken/JObject?= =?UTF-8?q?/JArray=20=E7=B4=A2=E5=BC=95=E8=AE=BF=E9=97=AE=E7=9A=84?= =?UTF-8?q?=E8=A1=A8=E8=BE=BE=E5=BC=8F=E8=A7=A3=E6=9E=90=EF=BC=9B=20-=20?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20object.Equals=20=E8=A1=A8=E8=BE=BE?= =?UTF-8?q?=E5=BC=8F=E8=A7=A3=E6=9E=90=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PostgreSQL/PostgreSQLCodeFirstTest.cs | 2 +- .../SqlServer/Curd/SqlServerSelectTest.cs | 9 +++ FreeSql/FreeSql.xml | 80 ++++++++----------- FreeSql/Internal/CommonExpression.cs | 7 +- .../PostgreSQLExpression.cs | 1 + 5 files changed, 50 insertions(+), 49 deletions(-) diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLCodeFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLCodeFirstTest.cs index 5db7074a..75cd98d8 100644 --- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLCodeFirstTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLCodeFirstTest.cs @@ -369,7 +369,7 @@ namespace FreeSql.Tests.PostgreSQL var item3NP = insert.AppendData(item2).NoneParameter().ExecuteInserted(); var item3 = insert.AppendData(item2).ExecuteInserted().First(); - var newitem2 = select.Where(a => a.Id == item3.Id).ToOne(); + var newitem2 = select.Where(a => a.Id == item3.Id && object.Equals(a.testFieldJToken["a"], "1")).ToOne(); var items = select.ToList(); } diff --git a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs index 8ebffb14..e55dc1a2 100644 --- a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs @@ -963,6 +963,15 @@ WHERE (((cast(a.[Id] as nvarchar)) in (SELECT b.[Title] a.Id, a.Clicks }); + + var testUnionAll = select + .WithSql("SELECT * FROM [tb_topic22] where id = 10") + .WithSql("SELECT * FROM [tb_topic22] where id = 11") + .ToSql(a => new + { + a.Id, + a.Clicks + }); } public class TestInclude_OneToManyModel1 diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 60d38476..4958b871 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -2961,6 +2961,40 @@ + + + C#:从元组集合中查找 exp1, exp2 是否存在 + SQL: + exp1 = that[0].Item1 and exp2 = that[0].Item2 OR + exp1 = that[1].Item1 and exp2 = that[1].Item2 OR + ... + 注意:当 that 为 null 或 empty 时,返回 1=0 + + + + + + + + + + + C#:从元组集合中查找 exp1, exp2, exp2 是否存在 + SQL: + exp1 = that[0].Item1 and exp2 = that[0].Item2 and exp3 = that[0].Item3 OR + exp1 = that[1].Item1 and exp2 = that[1].Item2 and exp3 = that[1].Item3 OR + ... + 注意:当 that 为 null 或 empty 时,返回 1=0 + + + + + + + + + + 测量两个经纬度的距离,返回单位:米 @@ -3234,49 +3268,3 @@ -完成(可能)被其他线程事务自动提交 - - 事务体 () => {} - - - - 开启事务(不支持异步) - - 超时,未执行完成(可能)被其他线程事务自动提交 - 事务体 () => {} - - - - 开启事务(不支持异步) - - - 事务体 () => {} - 超时,未执行完成(可能)被其他线程事务自动提交 - - - - 数据库访问对象 - - - - - 所有拦截方法都在这里 - - - - - CodeFirst 模式开发相关方法 - - - - - DbFirst 模式开发相关方法 - - - - - 全局过滤设置,可默认附加为 Select/Update/Delete 条件 - - - - diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index 64bed1e7..d7f48fdf 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -675,8 +675,11 @@ namespace FreeSql.Internal case "System.Convert": other3Exp = ExpressionLambdaToSqlCallConvert(exp3, tsc); break; } if (string.IsNullOrEmpty(other3Exp) == false) return other3Exp; - if (exp3.Method.Name == "Equals" && exp3.Object != null && exp3.Arguments.Count > 0) - return ExpressionBinary("=", exp3.Object, exp3.Arguments[0], tsc); + if (exp3.Method.Name == "Equals") + { + if (exp3.Arguments.Count > 0 && exp3.Object != null) return ExpressionBinary("=", exp3.Object, exp3.Arguments[0], tsc); + if (exp3.Arguments.Count > 1 && exp3.Method.DeclaringType == typeof(object)) return ExpressionBinary("=", exp3.Arguments[0], exp3.Arguments[1], tsc); + } if (callType.FullName.StartsWith("FreeSql.ISelectGroupingAggregate`")) { //if (exp3.Type == typeof(string) && exp3.Arguments.Any() && exp3.Arguments[0].NodeType == ExpressionType.Constant) { diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs index 797955ca..bcea0fdc 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs @@ -115,6 +115,7 @@ namespace FreeSql.PostgreSQL left = objExp == null ? null : getExp(objExp); switch (callExp.Method.Name) { + case "get_Item": return $"{left}->{getExp(callExp.Arguments[argIndex])}"; case "Any": return $"(jsonb_array_length(coalesce({left},'[]')) > 0)"; case "Contains": var json = getExp(callExp.Arguments[argIndex]);