ADO.NET 数据服务查询选项

URI 的查询选项段(如用于对资源进行寻址的 URI 格式(ADO.NET 数据服务框架)中所述)指定了两类信息:

  1. ADO.NET 数据服务系统查询选项.

  2. 服务操作参数(ADO.NET 数据服务框架).

查询选项和服务操作参数都必须符合以下规则:

  • 可以在单个 URI 查询字符串中指定任意数目的受支持的查询选项。

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

  • URI 中的查询选项的顺序并不重要。

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

  • 查询选项值区分大小写。

  • 在请求 URI 的查询字符串中,特定的系统查询选项只能出现一次。

语法

下面的部分将定义使用已扩充的巴科斯-诺尔范式规范中的语法元素来构造 ADO.NET 数据服务 URI 时应遵循的一组规则。该规范在 RFC 4234 中进行了定义。ADO.NET 数据服务 URI 由以下三个部分组成:服务根、资源路径和查询选项。将这三部分组合在一起可构成用于对任何资源进行寻址的 URI。

ADO.NET_DataService_URI = "http://" serviceRoot [ resourcePath ["?" queryOptions ] ]

serviceRoot = host [ ":" port ] [*( "/" segment-nz )]

resourcePath = "/" resourceSet | serviceOperation [ navPath ] 

navPath = ("("keyPredicate")" [ navPath_np / propertyPath / propertyPath_ct ] )

navPath_np = "/" resourceNavigationProperty [ navPath ]

propertyPath = "/" resourceProperty [ "/$value" ] 

propertyPath_ct = 1*("/" resourceComplexType) [ propertyPath ]

keyPredicate = 1*DIGIT / ("’" 1*unreserved "’") / 1*(HEXDIG HEXDIG) ["," keyPredicate]
 //NOTE: strings, GUIDs, and dates are enclosed in quotation marks.

queryOptions = sysQueryOperation / serviceOpParamName *(“&” sysQueryOperation / serviceOpParam)

前面的定义使用 RFC 3986 中的术语:

  • DIGIT 采用 RFC 3986 (0-9) 中的定义

  • host 采用 RFC 3986 中的定义

  • port 采用 RFC 3986 中的定义

  • segment-nz 采用 RFC 3986 中的定义(URI 保留字符集的外部没有空字符序列)

  • pchar 采用 RFC 3986 中的定义(URI 保留字符集的外部没有空字符序列)

每个规则的语义含义和范围分别为:

  • Service operation:服务操作的名称。请参见服务操作参数(ADO.NET 数据服务框架)

  • resourceSet:资源集的名称。允许的字符与实体数据模型 (EDM) 规范中允许对 EntitySet 名称使用的字符集匹配。

  • Resource type:前一个路径段中引用的资源集内的资源类型的名称。允许的字符与实体数据模型 (EDM) 规范中允许对 EntityType 名称使用的字符集匹配。

  • Resource property:路径段中资源类型或资源复杂类型上的资源属性的名称。允许的字符与 EDM 规范中允许对 EntityType 名称使用的字符集匹配。

  • Resource navigation property:前一个路径段中的资源类型上的资源导航属性或资源导航链接的名称。如果前一段为资源集,则此属性必须位于指定资源集中的类型上。有关导航和链接属性的更多信息,请参见资源路径规则和语义(ADO.NET 数据服务框架)。允许的字符与 EDM 规范中允许对导航属性名称使用的字符集匹配。

  • System query operation= "$" query "=" query 这种语法以 $ 开头并位于 URI 中的 ? 之后。有关更多信息,请参见 ADO.NET 数据服务系统查询选项

  • Service Operation Parameter= query "=" query 这些查询是服务操作的参数。查询可以作为服务操作的输入(将查询的结果作为函数的参数)。有关更多信息,请参见服务操作参数(ADO.NET 数据服务框架)

下面的语法显示 ADO.NET 数据服务 URI 的不同部分。

http://www.example.com:88/path/service.root.svc/Customers(‘ALFKI’)/Orders?$skip=2&$take=2

URI 的各个部分包括:

服务根:www.example.com:88/path/service.root.svc

主机:www.example.com

端口:88

资源路径:/Customers(‘ALFKI’)/Orders

资源集:Customers

导航路径:(‘ALFKI’)/Orders

键谓词:‘ALFKI’

导航路径导航属性:Orders

查询选项:$skip=2&$top=2

另请参见

概念

资源路径规则和语义(ADO.NET 数据服务框架)
ADO.NET 数据服务系统查询选项
服务操作参数(ADO.NET 数据服务框架)