查询OrderBy后只有Skip没有Take时,Orderby语句被丢弃 返回

SqlSugar
274

测试仓库https://gitee.com/johnec/SqlSugar.git ,文件Src/Asp.NetCore2/SqliteTest/a9_OrderbySkipTake.cs


            var students = db.Queryable<Student03>()
                    .OrderBy(sc => sc.Id, OrderByType.Desc)
                    .Skip(3)
                    .Take(5)
                    .ToList();
            var students2 = db.Queryable<Student03>()
                    .OrderBy(sc => sc.Id, OrderByType.Desc)
                    .Skip(3)
                    .ToList();
            var students3 = db.Queryable<Student03>()
                    .OrderBy(sc => sc.Id, OrderByType.Desc)
                    .Take(int.MaxValue)
                    .ToList();

生成SQL语句如下


[Sql]:SELECT Id,Name FROM Student03 ORDER BY Id DESC LIMIT 3,5
[Sql]:SELECT Id,Name FROM Student03 LIMIT 3,9223372036854775807
[Sql]:SELECT Id,Name FROM Student03 ORDER BY Id DESC LIMIT 0,2147483647


第二个查询中OrderBy被丢弃了


原因在SqliteQueryBuilder.cs的ToSqlString方法第47行

            if (Skip != null && Take == null)
            {
                if (this.OrderByValue == "ORDER BY ") this.OrderByValue += GetSelectValue.Split(',')[0];
                result= string.Format(PageTempalte, GetSelectValue, GetTableNameString, GetWhereValueString, GetGroupByString + HavingInfos, (Skip != null || Take != null) ? null : GetOrderByString, Skip.ObjToInt(), long.MaxValue);
            }


当Skip != null时,(Skip != null || Take != null) ? null : GetOrderByString总是null


稍微搜了一下,除了MySqlQueryBuilder.ToSqlString之外,其它数据库的查询都是这么写的,为什么?


而且Take方法使用int参数  ISugarQueryable<T> Take(int num)  ,这里又使用 long.MaxValue 又是为什么?

热忱回答0