查询表达式(WCF 数据服务)

利用查询表达式,您可以对资源执行传统的查询操作,如筛选、排序和分页。查询表达式由查询选项、查询运算符和查询函数组成。查询选项定义对返回资源所执行的操作,如筛选或排序等。例如,下面的 URI(基于快速入门数据服务)返回其 City 属性包含 London 的所有 Customers 实体。

https://localhost:12345/Northwind.svc/Customers?$filter=City eq 'London'

系统定义的查询选项以美元符号 ($) 作为前缀。下表介绍 WCF Data Services 支持的所有系统查询选项:

查询选项

说明

$expand

指示该服务在单个响应中返回相关实体集以及已寻址的实体。可以指定多个相关集,用逗号分隔它们。例如,下面的 URI 在单个响应中以指定顺序返回相关的 Customer 和 Detail 实体。

https://localhost:12345/Northwind.svc/Orders(10248)?$expand=Customers,Order_Details

有关详细的选项语法,请参见 Atom 发布协议:数据服务 URI 和负载扩展规范文档中的 2.2.3.6.1.3 Expand 系统查询选项 ($expand)(可能为英文网页)。

$filter

指示该服务使用查询运算符和函数对返回的集进行筛选。例如,下面的 URI 返回其 Country 属性包含 USA 的所有 Customers 实体集。

https://localhost:12345/Northwind.svc/Customers?$filter=Country eq 'USA'

有关详细的选项语法,请参见 Atom 发布协议:数据服务 URI 和负载扩展规范文档中的 2.2.3.6.1.4 Filter 系统查询选项 ($filter)(可能为英文网页)。

$inlinecount

如果指定值 allpages,则指示该服务包含由 URI 返回的所有实体的计数。此计数作为单独查询执行,因此返回的值与所有已定义的页大小限制无关。例如,下面的 URI 在计数元素中返回值 13 并返回请求的 Customers 实体。

https://localhost:12345/Northwind.svc/Customers?$filter=Country%20eq%20'USA'&$inlinecount=allpages

有关详细的选项语法,请参见 Atom 发布协议:数据服务 URI 和负载扩展规范文档中的 2.2.3.6.1.10(可能为英文网页)。

$orderby

指示该服务使用查询运算符对返回的实体进行排序。例如,下面的 URI 按 ContactName 属性值对返回的 Customers 进行排序(从 Z 到 A)。

https://localhost:12345/Northwind.svc/Customers?$orderby=ContactName desc

此选项也可以对返回的集进行筛选。下面的 URI 只返回不在 USA 中的 Customers,并按 Country 属性值对结果进行排序。

https://localhost:12345/Northwind.svc/Customers?$orderby=Country ne 'USA' asc

有关详细的选项语法,请参见 Atom 发布协议:数据服务 URI 和负载扩展规范文档中的 2.2.3.6.1.6(可能为英文网页)。

$select

指示该服务将返回的属性限定为指定投影中的属性。使用 $select 可以减少该数据服务返回的数据量。例如,下面的 URI 返回所选的 Order 的 OrderID 值以及一个返回相关 Order_Details 实体集的链接。

https://localhost:12345/Northwind.svc/Orders(10643)?$select=OrderID,Order_Details

有关详细的选项语法,请参见 Atom 发布协议:数据服务 URI 和负载扩展规范文档中的 2.2.3.6.1.11(可能为英文网页)。

$skip

指示该服务跳过从集开头算起的指定数量的实体。将 $top 与 $skip 一起使用可以对数据进行分页。例如,下面的 URI 从所有 Customers 实体结果中返回第 51 个资源到第 60 个资源。

https://localhost:12345/Northwind.svc/Customers?$top=10&$skip=50

有关详细的选项语法,请参见 Atom 发布协议:数据服务 URI 和负载扩展规范文档中的 2.2.3.6.1.7 Skip 系统查询选项 ($skip)(可能为英文网页)。

$skiptoken

如果启用服务器分页,则指示该服务返回下一页结果。有关更多信息,请参见配置数据服务(WCF 数据服务)。有关详细的选项语法,请参见 Atom 发布协议:数据服务 URI 和负载扩展规范文档中的 2.2.3.6.1.9 Skip Token 系统查询选项(可能为英文网页)。

$top

指示该服务返回集中指定数量的实体。将 $skip 与 $top 一起使用可以对数据进行分页。例如,下面的 URI 从所有 Customers 实体结果中返回第 50 个资源到第 60 个资源。

https://localhost:12345/Northwind.svc/Customers?$top=10&$skip=50

有关详细的选项语法,请参见 Atom 发布协议:数据服务 URI 和负载扩展规范文档中的 2.2.3.6.1.8 Top 系统查询选项 ($top)(可能为英文网页)。

有关这些查询选项如何为各种类型的资源提供支持的更多信息,请参见 Atom 发布协议:数据服务 URI 和负载扩展规范文档中的 2.2.3.6.1 系统查询选项(可能为英文网页)。

利用查询运算符,可以在 $filter 和 $orderby 选项中使用逻辑、比较和算术运算。例如,下面的 URI 返回其邮政编码不以 100 结尾的所有订单。

https://localhost:12345/Northwind.svc/Orders?$filter=not endswith(ShipPostalCode,'100')

有关运算符的完整列表,请参见查询运算符(WCF 数据服务)

利用查询函数,可以在整个 $filter 选项中执行预定义函数。有关函数的完整列表,请参见查询函数(WCF 数据服务)

查询表达式注意事项

下列常规注意事项适用于查询表达式:

  • 当数据服务在 URI 中应用查询选项时,将按以下顺序应用这些选项:

    1. $filter

    2. $inlinecount

    3. $orderby

    4. $skiptoken

    5. $skip

    6. $top

    7. $select

    8. $expand

    有关更多信息,请参见 Atom 发布协议:数据服务 URI 和负载扩展规范文档中的 2.2.3.6.1.2 Evaluating 系统查询选项(可能为英文网页)。

  • 实体集和服务操作均支持查询表达式。

  • 在查询字符串中,每个查询选项可以独立于任何其他选项存在。

  • 查询选项的名称和值区分大小写。

  • 在请求 URI 的查询字符串中,查询选项只能使用一次。

  • 处理过程中出现的所有语法和语义错误都将产生响应代码“400 错误的请求”。

  • 任何查询选项都不支持对集执行比较和运算。例如,如果 Orders 表示单个集,则 $filter=Orders/Name eq 'Name' 无效;而如果 Order 表示单个实体,则 $filter=Order/Name eq 'Name' 有效。

  • 由于 $inlinecount 作为一个单独查询执行,该查询不同于返回数据元素的查询,因此返回的值可能不会反映返回元素的实际计数。如果在执行数据查询和计数查询的中间插入或删除了资源,则可能会出现这种情况。

  • 定义自定义 Atom 发布协议 (AtomPub) 源时,必须确保在使用 $select 表达式定义的投影中包含已定义自定义映射的所有实体属性。如果投影中不包含某个已映射的实体属性,则可能会丢失数据。有关更多信息,请参见 Atom 源自定义(WCF 数据服务)

有关更多信息,请参见 Atom 发布协议:数据服务 URI 和负载扩展规范文档中的 2.2.3.6 查询选项(可能为英文网页)。

本节内容

请参见

概念

对资源进行寻址(WCF 数据服务)

快速入门(WCF 数据服务)