FreeSql icon indicating copy to clipboard operation
FreeSql copied to clipboard

Take(0)/Limit(0)会导致生成错误的SQL

Open LeaFrock opened this issue 6 months ago • 1 comments

问题描述及重现代码:

若在表达式中使用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

LeaFrock avatar Jun 09 '25 09:06 LeaFrock

小于等于0时不起作用,可以用 .Cancel()

2881099 avatar Jun 09 '25 15:06 2881099