From 6d9b6b66709dea883608b1ff074d1ab85bc86378 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Mon, 12 Aug 2019 16:53:13 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20ISelect=20Sum/First=20?= =?UTF-8?q?=E5=AD=90=E6=9F=A5=E8=AF=A2=E6=97=B6=EF=BC=8C=E8=8B=A5=E5=AD=90?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=AE=9E=E4=BD=93=E7=B1=BB=E4=B8=8E=E4=B8=BB?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E4=B8=80=E6=A0=B7=E6=97=B6=EF=BC=8C=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E7=9A=84=20bug=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MySqlConnector/Curd/MySqlSelectTest.cs | 4 ++-- .../FreeSql.Tests/MySql/Curd/MySqlSelectTest.cs | 4 ++-- .../PostgreSQL/Curd/PostgreSQLSelectTest.cs | 4 ++-- FreeSql/Internal/CommonExpression.cs | 10 ++++++++-- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlSelectTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlSelectTest.cs index 6e4180c8..66c05d41 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlSelectTest.cs @@ -884,12 +884,12 @@ namespace FreeSql.Tests.MySqlConnector var subquery = select.ToSql(a => new { all = a, - count = select.Sum(b => b.Id) + count = (long)select.Sum(b => b.Id) }); var subqueryList = select.ToList(a => new { all = a, - count = select.Sum(b => b.Id) + count = (long)select.Sum(b => b.Id) }); } [Fact] diff --git a/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlSelectTest.cs index a6006fdb..b98117d7 100644 --- a/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlSelectTest.cs @@ -874,12 +874,12 @@ namespace FreeSql.Tests.MySql var subquery = select.ToSql(a => new { all = a, - count = select.Sum(b => b.Id) + count = (long)select.Sum(b => b.Id) }); var subqueryList = select.ToList(a => new { all = a, - count = select.Sum(b => b.Id) + count = (long)select.Sum(b => b.Id) }); } [Fact] diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLSelectTest.cs index 42ff5ad9..a898a01e 100644 --- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLSelectTest.cs @@ -832,12 +832,12 @@ namespace FreeSql.Tests.PostgreSQL var subquery = select.ToSql(a => new { all = a, - count = select.Sum(b => b.Id) + count = (long)select.Sum(b => b.Id) }); var subqueryList = select.ToList(a => new { all = a, - count = select.Sum(b => b.Id) + count = (long)select.Sum(b => b.Id) }); } [Fact] diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index 887c48f3..a08490a0 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -817,12 +817,18 @@ namespace FreeSql.Internal case "Min": case "Max": case "Avg": - var sqlSum = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { $"{exp3.Method.Name.ToLower()}({ExpressionLambdaToSql(exp3.Arguments.FirstOrDefault(), tsc)})" })?.ToString(); + var tscClone1 = tsc.CloneDisableDiyParse(); + tscClone1.isDisableDiyParse = false; + tscClone1._tables = fsqltables; + var sqlSum = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { $"{exp3.Method.Name.ToLower()}({ExpressionLambdaToSql(exp3.Arguments.FirstOrDefault(), tscClone1)})" })?.ToString(); if (string.IsNullOrEmpty(sqlSum) == false) return $"({sqlSum.Replace("\r\n", "\r\n\t")})"; break; case "First": - var sqlFirst = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { ExpressionLambdaToSql(exp3.Arguments.FirstOrDefault(), tsc) })?.ToString(); + var tscClone2 = tsc.CloneDisableDiyParse(); + tscClone2.isDisableDiyParse = false; + tscClone2._tables = fsqltables; + var sqlFirst = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { ExpressionLambdaToSql(exp3.Arguments.FirstOrDefault(), tscClone2) })?.ToString(); if (string.IsNullOrEmpty(sqlFirst) == false) return $"({sqlFirst.Replace("\r\n", "\r\n\t")})"; break;