From 969e690682f93b62feb818b4568b6b67ece91bd8 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Thu, 19 Dec 2019 15:50:42 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20ISelect.Count()=20?= =?UTF-8?q?=E4=B9=8B=E5=89=8D=E4=BD=BF=E7=94=A8=E4=BA=86=20OrderBy=20?= =?UTF-8?q?=E4=BC=9A=E4=BA=A7=E7=94=9F=E7=9A=84=20SQL=20=E8=AF=AD=E6=B3=95?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SqlServer/Curd/SqlServerSelectTest.cs | 3 ++ FreeSql/Internal/CommonExpression.cs | 5 ++-- .../SelectProvider/Select0Provider.cs | 28 +++++++++++++++++-- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs index 2f141e8d..8e318e6b 100644 --- a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs @@ -209,8 +209,11 @@ namespace FreeSql.Tests.SqlServer public void Count() { var count = select.Where(a => 1 == 1).Count(); + var count11 = select.Where(a => 1 == 1).OrderBy(a => a.Id).Count(); select.Where(a => 1 == 1).Count(out var count2); + select.Where(a => 1 == 1).OrderBy(a => a.Id).Count(out var count22); Assert.Equal(count, count2); + Assert.Equal(count11, count22); Assert.Equal(0, select.Where(a => 1 == 2).Count()); var subquery = select.ToSql(a => new diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index b1d2a2d8..e715f4e4 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -762,8 +762,9 @@ namespace FreeSql.Internal else if (fsqlType != null) { var call3Exp = exp3tmp as MethodCallExpression; - var method = fsqlType.GetMethod(call3Exp.Method.Name, call3Exp.Arguments.Select(a => a.Type).ToArray()); - if (call3Exp.Method.ContainsGenericParameters) method.MakeGenericMethod(call3Exp.Method.GetGenericArguments()); + var method = call3Exp.Method; + //var method = fsqlType.GetMethod(call3Exp.Method.Name, call3Exp.Arguments.Select(a => a.Type).ToArray()); + //if (call3Exp.Method.ContainsGenericParameters) method.MakeGenericMethod(call3Exp.Method.GetGenericArguments()); var parms = method.GetParameters(); var args = new object[call3Exp.Arguments.Count]; for (var a = 0; a < args.Length; a++) diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs index cd308800..238a0285 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs @@ -158,7 +158,19 @@ namespace FreeSql.Internal.CommonProvider return this.ToList("1 as1").Sum() > 0; //这里的 Sum 为了分表查询 } - public long Count() => this.ToList("count(1) as1").Sum(); //这里的 Sum 为了分表查询 + public long Count() + { + var tmpOrderBy = _orderby; + _orderby = null; //解决 select count(1) from t order by id 这样的 SQL 错误 + try + { + return this.ToList("count(1) as1").Sum(); //这里的 Sum 为了分表查询 + } + finally + { + _orderby = tmpOrderBy; + } + } public TSelect Count(out long count) { @@ -1111,7 +1123,19 @@ namespace FreeSql.Internal.CommonProvider return (await this.ToListAsync("1 as1")).Sum() > 0; //这里的 Sum 为了分表查询 } - async public Task CountAsync() => (await this.ToListAsync("count(1) as1")).Sum(); //这里的 Sum 为了分表查询 + async public Task CountAsync() + { + var tmpOrderBy = _orderby; + _orderby = null; + try + { + return (await this.ToListAsync("count(1) as1")).Sum(); //这里的 Sum 为了分表查询 + } + finally + { + _orderby = tmpOrderBy; + } + } async public Task ToDataTableAsync(string field = null) {