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) {