From 3bc24087c4472c24d92e6e642abb84eb6e61e05a Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sat, 8 Jul 2017 01:22:14 +0800 Subject: [PATCH] Page Select BUG --- Src/Asp.Net/SqlServerTest/Demos/1_Query.cs | 7 +++ Src/Asp.Net/SqlServerTest/Program.cs | 26 +++++------ .../SqlBuilderProvider/QueryBuilder.cs | 46 ++++++------------- .../SqlBuilder/SqlServerQueryBuilder.cs | 7 +++ 4 files changed, 40 insertions(+), 46 deletions(-) diff --git a/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs b/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs index 9c677d123..c302adc6c 100644 --- a/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs +++ b/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs @@ -340,6 +340,13 @@ namespace OrmTest.Demo var s7 = db.Queryable((st, sc) => new object[] { JoinType.Left,st.SchoolId==sc.Id }).Select((st, sc) => sc).ToList(); + + var s8 = db.Queryable((st, sc) => new object[] { + JoinType.Left,st.SchoolId==sc.Id + }) + .OrderBy((st, sc) => st.SchoolId) + .Select((st, sc) => sc) + .Take(1).ToList(); } private static void Sqlable() { diff --git a/Src/Asp.Net/SqlServerTest/Program.cs b/Src/Asp.Net/SqlServerTest/Program.cs index f636767fe..32a3cc7c6 100644 --- a/Src/Asp.Net/SqlServerTest/Program.cs +++ b/Src/Asp.Net/SqlServerTest/Program.cs @@ -18,19 +18,19 @@ namespace OrmTest static void Main(string[] args) { // /***Unit Test***/ - new Select(1).Init(); - new Field(1).Init(); - new Where(1).Init(); - new Method(1).Init(); - new JoinQuery(1).Init(); - new SingleQuery(1).Init(); - new SelectQuery(1).Init(); - new AutoClose(1).Init(); - new Insert(1).Init(); - new Delete(1).Init(); - new Update(1).Init(); - new Mapping(1).Init(); - new DataTest(1).Init(); + //new Select(1).Init(); + //new Field(1).Init(); + //new Where(1).Init(); + //new Method(1).Init(); + //new JoinQuery(1).Init(); + //new SingleQuery(1).Init(); + //new SelectQuery(1).Init(); + //new AutoClose(1).Init(); + //new Insert(1).Init(); + //new Delete(1).Init(); + //new Update(1).Init(); + //new Mapping(1).Init(); + //new DataTest(1).Init(); /***Performance Test***/ new SqlSugarPerformance(100).Select(); diff --git a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs index c66527aec..dbbeb842f 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs @@ -124,10 +124,7 @@ namespace SqlSugar { get { - return @"WITH PageTable AS( - {0} - ) - SELECT * FROM (SELECT *,ROW_NUMBER() OVER({1}) AS RowIndex FROM PageTable ) T WHERE RowIndex BETWEEN {2} AND {3}"; + return @"SELECT * FROM ({0}) T WHERE RowIndex BETWEEN {1} AND {2}"; } } public virtual string DefaultOrderByTemplate @@ -232,34 +229,25 @@ namespace SqlSugar } } sql = new StringBuilder(); - sql.AppendFormat(SqlTemplate, GetSelectValue, GetTableNameString, GetWhereValueString, GetGroupByString + HavingInfos, (Skip != null || Take != null) ? null : GetOrderByString); + if (this.OrderByValue == null && (Skip != null || Take != null)) this.OrderByValue = " Order By GetDate() "; + if (this.PartitionByValue.IsValuable()) + { + this.OrderByValue = this.PartitionByValue + this.OrderByValue; + } + sql.AppendFormat(SqlTemplate, GetSelectValue, GetTableNameString, GetWhereValueString, GetGroupByString + HavingInfos); + sql.Replace("{$:OrderByString:$}", (Skip != null || Take != null) ? string.Format(",ROW_NUMBER() OVER({0}) AS RowIndex ", GetOrderByString) : null); if (IsCount) { return sql.ToString(); } if (Skip != null && Take == null) { - if (this.OrderByValue == null) this.OrderByValue = " Order By GetDate() "; - if (this.PartitionByValue.IsValuable()) - { - this.OrderByValue = this.PartitionByValue + this.OrderByValue; - } - return string.Format(PageTempalte, sql.ToString(), GetOrderByString, Skip.ObjToInt() + 1, long.MaxValue); + return string.Format(PageTempalte, sql.ToString(), Skip.ObjToInt() + 1, long.MaxValue); } else if (Skip == null && Take != null) { - if (this.OrderByValue == null) this.OrderByValue = " Order By GetDate() "; - if (this.PartitionByValue.IsValuable()) - { - this.OrderByValue = this.PartitionByValue + this.OrderByValue; - } - return string.Format(PageTempalte, sql.ToString(), GetOrderByString, 1, Take.ObjToInt()); + return string.Format(PageTempalte, sql.ToString(), 1, Take.ObjToInt()); } else if (Skip != null && Take != null) { - if (this.OrderByValue == null) this.OrderByValue = " Order By GetDate() "; - if (this.PartitionByValue.IsValuable()) - { - this.OrderByValue = this.PartitionByValue + this.OrderByValue; - } - return string.Format(PageTempalte, sql.ToString(), GetOrderByString, Skip.ObjToInt() + 1, Skip.ObjToInt() + Take.ObjToInt()); + return string.Format(PageTempalte, sql.ToString(), Skip.ObjToInt() + 1, Skip.ObjToInt() + Take.ObjToInt()); } else { @@ -388,7 +376,7 @@ namespace SqlSugar if (this.TableWithString.IsValuable()) { - result += "," + string.Join(",", this.EasyJoinInfos.Select(it => string.Format("{0} {1} {2} ",GetTableName(it.Value), it.Key, TableWithString))); + result += "," + string.Join(",", this.EasyJoinInfos.Select(it => string.Format("{0} {1} {2} ", GetTableName(it.Value), it.Key, TableWithString))); } else { @@ -406,15 +394,7 @@ namespace SqlSugar if (IsCount) return null; else { - if (!IsSingle() && (Take != null || Skip != null)) - { - var result = Regex.Replace(this.OrderByValue, @"\[\w+\]\.", ""); - return result; - } - else - { - return this.OrderByValue; - } + return this.OrderByValue; } } } diff --git a/Src/Asp.Net/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerQueryBuilder.cs b/Src/Asp.Net/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerQueryBuilder.cs index d796f37c0..d2d1ec424 100644 --- a/Src/Asp.Net/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerQueryBuilder.cs +++ b/Src/Asp.Net/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerQueryBuilder.cs @@ -8,5 +8,12 @@ namespace SqlSugar { public class SqlServerQueryBuilder: QueryBuilder { + public override string SqlTemplate + { + get + { + return "SELECT {0}{{$:OrderByString:$}} FROM {1}{2}{3}"; + } + } } }