查询OrderBy后只有Skip没有Take时,Orderby语句被丢弃 返回
SqlSugar
274
唐朝板栗 发布于1个月前
悬赏:0 飞吻
测试仓库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 又是为什么?