dotnetcore / dotnetcore/FreeSql

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

Open
#2,034 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
C#
Stars
4.4k
Forks
910
PR merge metrics
No merged PRs in 30d

Description

#### 问题描述及重现代码:

若在表达式中使用Take方法,且传入的参数为0的话,会导致生成的SQL忽略`top 0`限制,从而变成查询全表。由于传入的Take参数可能来自第三方或者中间过程的输出,一旦校验不完全就可能会导致这样的情况发生。

期待的行为应该是直接返回空集合,或者干脆抛出`ArgumentOutOfRangeException`。

```c#
freeSql.Select()
.OrderBy(u => u.Id)
.Take(0) // 或Limit(0)
.ToSql(u => u.Name);
```

目前会被翻译为:

```sql

SELECT a.[Name] as1
FROM [UserInfo] a
ORDER BY a.[Id]

```

#### 数据库版本

SqlServer 2016

#### 安装的Nuget包

3.5.207

#### .net framework/. net core? 及具体版本

.NET 9

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.