FreeSql
FreeSql copied to clipboard
Take(0)/Limit(0)会导致生成错误的SQL
问题描述及重现代码:
若在表达式中使用Take方法,且传入的参数为0的话,会导致生成的SQL忽略top 0限制,从而变成查询全表。由于传入的Take参数可能来自第三方或者中间过程的输出,一旦校验不完全就可能会导致这样的情况发生。
期待的行为应该是直接返回空集合,或者干脆抛出ArgumentOutOfRangeException。
freeSql.Select<UserInfo>()
.OrderBy(u => u.Id)
.Take(0) // 或Limit(0)
.ToSql(u => u.Name);
目前会被翻译为:
SELECT a.[Name] as1
FROM [UserInfo] a
ORDER BY a.[Id]
数据库版本
SqlServer 2016
安装的Nuget包
3.5.207
.net framework/. net core? 及具体版本
.NET 9
小于等于0时不起作用,可以用 .Cancel()