筛选将大型数据集缩小为仅所需的记录。 在 REST 中,数据 API 生成器(DAB)支持 OData 启发的 $filter 查询参数。 每个筛选器编译为参数化 SQL,以确保安全性和一致性。
快速浏览
| Operator | Meaning |
|---|---|
eq |
平等 |
ne |
不等于 |
gt |
大于 |
ge |
大于或等于 |
lt |
小于 |
le |
小于或等于 |
and |
逻辑 AND |
or |
逻辑 OR |
not |
逻辑“非” |
( ) |
分组 |
eq
等于。 返回字段的值与提供的文字或 null。
在此示例中,我们获取标题相等 'Dune'的书籍,可用标志为 true,价格为 20,发布日期为 2024 年 1 月 1 日,分级为 null。
GET /api/books?$filter=
title eq 'Dune' and
available eq true and
price eq 20 and
published_on eq 2024-01-01T00:00:00Z and
rating eq null
注释
$filter 支持 eq null 并 ne null 直接进行 null 比较。
概念 SQL
SELECT * FROM Books
WHERE title = 'Dune'
AND available = 1
AND price = 20
AND published_on = '2024-01-01T00:00:00Z'
AND rating IS NULL;
ne
不等于。 返回字段的值与给定文本不匹配或不为 null 的记录。
在此示例中,我们将获取标题不 'Foundation'为、可用标志不为 false、价格不为零、发布日期不是 2023 年 12 月 31 日且分级不为 null 的书籍。
GET /api/books?$filter=
title ne 'Foundation' and
available ne false and
price ne 0 and
published_on ne 2023-12-31T00:00:00Z and
rating ne null
注释
筛选日期或日期/时间字段时,请使用 无引号 的 ISO 8601 UTC 格式(yyyy-MM-ddTHH:mm:ssZ)。
带引号或 OData 样式的格式无效。
- 错误:
$filter=Date ge '2025-01-01' - 错误:
$filter=Date ge datetime'2025-01-01' - 正确:
$filter=Date ge 2025-01-01T00:00:00Z
概念 SQL
SELECT * FROM Books
WHERE title <> 'Foundation'
AND available <> 0
AND price <> 0
AND published_on <> '2023-12-31T00:00:00Z'
AND rating IS NOT NULL;
gt
大于。 返回字段值严格高于给定文本的记录。
在此示例中,我们获取的书籍标题按字母顺序 'A'排序,可用标志为 true,价格大于 10,发布日期在 2020 年 1 月 1 日之后。
GET /api/books?$filter=
title gt 'A' and
available gt false and
price gt 10 and
published_on gt 2020-01-01T00:00:00Z
概念 SQL
SELECT * FROM Books
WHERE title > 'A'
AND available > 0
AND price > 10
AND published_on > '2020-01-01T00:00:00Z';
ge
大于或等于。 返回字段值高于或等于给定文本的记录。
在此示例中,我们获取的书籍标题 'A' 为或更高版本,可用标志为 true,价格至少为 10,发布日期为 2020 年 1 月 1 日或之后。
GET /api/books?$filter=
title ge 'A' and
available ge false and
price ge 10 and
published_on ge 2020-01-01T00:00:00Z
概念 SQL
SELECT * FROM Books
WHERE title >= 'A'
AND available >= 0
AND price >= 10
AND published_on >= '2020-01-01T00:00:00Z';
lt
小于。 返回字段值严格低于给定文本的记录。
在此示例中,我们获取其标题排序之前的 'Z'书籍,可用标志为 false,价格小于 50,发布日期在 2030 年 1 月 1 日之前。
GET /api/books?$filter=
title lt 'Z' and
available lt true and
price lt 50 and
published_on lt 2030-01-01T00:00:00Z
概念 SQL
SELECT * FROM Books
WHERE title < 'Z'
AND available < 1
AND price < 50
AND published_on < '2030-01-01T00:00:00Z';
le
小于或等于。 返回字段值小于或等于给定文本的记录。
在此示例中,我们获取的书籍的标题排序之前或等于 'Z',可用标志为 true,价格为 100 或更少,发布日期在 2030 年 1 月 1 日或之前。
GET /api/books?$filter=
title le 'Z' and
available le true and
price le 100 and
published_on le 2030-01-01T00:00:00Z
概念 SQL
SELECT * FROM Books
WHERE title <= 'Z'
AND available <= 1
AND price <= 100
AND published_on <= '2030-01-01T00:00:00Z';
and
逻辑 AND。 合并多个条件,这些条件必须全部为 true 才能匹配记录。
在此示例中,我们获取标题 'Dune'所在书籍,可用标志为 true,价格小于 50,发布日期在 2020 年 1 月 1 日之后,评级为 null。
GET /api/books?$filter=
title eq 'Dune' and
available eq true and
price lt 50 and
published_on ge 2020-01-01T00:00:00Z and
rating eq null
概念 SQL
SELECT * FROM Books
WHERE title = 'Dune'
AND available = 1
AND price < 50
AND published_on >= '2020-01-01T00:00:00Z'
AND rating IS NULL;
or
逻辑或。 合并一个条件,其中至少一个必须为 true 才能匹配记录。
在此示例中,我们获取标题所在的 'Dune'书籍,或者可用标志为 true,或者价格大于 20,或者发布日期在 2025 年 1 月 1 日之前,或者分级为 null。
GET /api/books?$filter=
title eq 'Dune' or
available eq true or
price gt 20 or
published_on lt 2025-01-01T00:00:00Z or
rating eq null
概念 SQL
SELECT * FROM Books
WHERE title = 'Dune'
OR available = 1
OR price > 20
OR published_on < '2025-01-01T00:00:00Z'
OR rating IS NULL;
not
逻辑 NOT。 仅当条件为 false 时,才会返回记录。
在此示例中,我们获取所有没有标题 'Romance'、不可用、不花费低于 10 美元的书籍,在 2020 年 1 月 1 日之前未发布,并且没有空评级。
GET /api/books?$filter=
not (
title eq 'Romance' and
available eq false and
price lt 10 and
published_on lt 2020-01-01T00:00:00Z and
rating eq null
)
概念 SQL
SELECT * FROM Books
WHERE NOT (
title = 'Romance'
AND available = 0
AND price < 10
AND published_on < '2020-01-01T00:00:00Z'
AND rating IS NULL
);
( ) 分组
对子表达式进行分组,以便可以在复杂筛选器中控制评估顺序。
在此示例中,我们获取标题为或'Fiction''SciFi'低于 $25 的书籍,并且该书的价格低于 25 美元,发布日期在 2020 年 1 月 1 日之后,评级为 null。
GET /api/books?$filter=
(title eq 'Fiction' or title eq 'SciFi') and
(available eq true or price lt 25) and
published_on ge 2020-01-01T00:00:00Z and
rating eq null
概念 SQL
SELECT * FROM Books
WHERE (title = 'Fiction' OR title = 'SciFi')
AND (available = 1 OR price < 25)
AND published_on >= '2020-01-01T00:00:00Z'
AND rating IS NULL;
示例配置
{
"runtime": {
"pagination": {
"default-page-size": 100,
"max-page-size": 100000
}
},
"entities": {
"Book": {
"source": {
"type": "table",
"object": "dbo.books"
},
"mappings": {
"sku_title": "title",
"sku_price": "price"
},
"relationships": {
"book_category": {
"cardinality": "one",
"target.entity": "Category",
"source.fields": [ "category_id" ],
"target.fields": [ "id" ]
}
}
},
"Category": {
"source": {
"type": "table",
"object": "dbo.categories"
},
"relationships": {
"category_books": {
"cardinality": "many",
"target.entity": "Book",
"source.fields": [ "id" ],
"target.fields": [ "category_id" ]
}
}
}
}
}
另请参阅
| 概念 | REST | GraphQL | 目的 |
|---|---|---|---|
| 投影 | $select | 物品 | 选择要返回的字段 |
| Filtering | $filter | 滤波器 | 按条件限制行 |
| 排序 | $orderby | orderBy | 定义排序顺序 |
| 页面大小 | $first | first | 限制每页的项数 |
| 延续 | $after | 后 | 使用光标从最后一页继续 |
注释
REST 关键字以 $遵循 OData 约定开头。