2.2.3.6.1.1 Common Expression Syntax
Note: Some of the information in this section is subject to change because it applies to a preliminary implementation of the protocol or structure. For information about specific differences between versions, see the behavior notes that are provided in the Product Behavior appendix.
The filter and orderby query options are specified in the data serviceURI via the common expression syntax defined in following Augmented BNF for query option expressions listing.
commonExpression = [WSP] (boolCommonExpression / methodCallExpression /
parenExpression / literalExpression / addExpression /
subExpression / mulExpression / divExpression /
modExpression / negateExpression / memberExpression
/ firstMemberExpression / castExpression / functionCallExpression ) [WSP]
boolCommonExpression = [WSP] (boolLiteralExpression / andExpression /
orExpression /
boolPrimitiveMemberExpression / eqExpression / neExpression /
ltExpression / leExpression / gtExpression /
geExpression / notExpression / isofExpression/
boolCastExpression / boolMethodCallExpression /
firstBoolPrimitiveMemberExpression / boolParenExpression /
boolFunctionCallExpression) [WSP]
parenExpression = "(" [WSP] commonExpression [WSP] ")"
boolParenExpression = "(" [WSP] boolCommonExpression [WSP] ")"
andExpression = boolCommonExpression WSP "and" WSP boolCommonExpression
orExpression = boolCommonExpression WSP "or" WSP boolCommonExpression
eqExpression = commonExpression WSP "eq" WSP commonExpression
neExpression = commonExpression WSP "ne" WSP commonExpression
ltExpression = commonExpression WSP "lt" WSP commonExpression
leExpression = commonExpression WSP "le" WSP commonExpression
gtExpression = commonExpression WSP "gt" WSP commonExpression
geExpression = commonExpression WSP "ge" WSP commonExpression
addExpression = commonExpression WSP "add" WSP commonExpression
subExpression = commonExpression WSP "sub" WSP commonExpression
mulExpression = commonExpression WSP "mul" WSP commonExpression
divExpression = commonExpression WSP "div" WSP commonExpression
modExpression = commonExpression WSP "mod" WSP commonExpression
negateExpression = "-" [WSP] commonExpression
notExpression = "not" WSP commonExpression
isofExpression = "isof" [WSP] "("[[WSP] commonExpression [WSP] ","][WSP]
stringUriLiteral [WSP] ")"
castExpression = "cast" [WSP] "("[[WSP] commonExpression [WSP] ","][WSP]
stringUriLiteral [WSP] ")"
boolCastExpression = "cast" [WSP]
"("[[WSP] commonExpression [WSP] ","][WSP]
"Edm.Boolean" [WSP] ")"
firstMemberExpression = [WSP] [namespaceQualifiedEnitityType "/"]
[lambdaPredicatePrefixExpression]
; A lambdaPredicatePrefixExpression is only defined inside a
; lambdaPredicateExpression. A lambdaPredicateExpression is required
; inside a lambdaPredicateExpression.
entityNavProperty /
; section 2.2.3.1
entityComplexProperty /
; section 2.2.3.1
entitySimpleProperty /
; section 2.2.3.1
entityCollectionProperty
; section 2.2.3.1
firstBoolPrimitiveMemberExpression = [namespaceQualifiedEntityType "/"]entityProperty
; section 2.2.3.1
memberExpression = commonExpression [WSP] "/" [WSP] [namespaceQualifiedEntityType "/"]
entityNavProperty / ; section 2.2.3.1
entityComplexProperty / ; section 2.2.3.1
entitySimpleProperty / ; section 2.2.3.1
entityCollectionProperty ; section 2.2.3.1
boolPrimitiveMemberExpression = commonExpression [WSP] "/" [WSP]
[namespaceQualifiedEntityType "/"]entityProperty
; section 2.2.3.1
literalExpression = stringUriLiteral ; section 2.2.2
/ dateTimeUriLiteral ; section 2.2.2
/ dateTimeOffsetUriLiteral ; section 2.2.2
/ timeUriLiteral ; section 2.2.2
/ decimalLiteral ; section 2.2.2
/ guidUriLiteral ; section 2.2.2
/ singleLiteral ; section 2.2.2
/ doubleLiteral ; section 2.2.2
/ int16Literal ; section 2.2.2
/ int32Literal ; section 2.2.2
/ int64Literal ; section 2.2.2
/ binaryLiteral ; section 2.2.2
/ nullLiteral ; section 2.2.2
/ byteLiteral ; section 2.2.2
/ fullPointLiteral ; section 2.2.2
/ fullLineStringLiteral ; section 2.2.2
/ fullPolygonLiteral ; section 2.2.2
/ fullGeoCollectionLiteral ; section 2.2.2
/ fullMultiPointLiteral ; section 2.2.2
/ fullMultiLineStringLiteral ; section 2.2.2
/ fullMultiGeographyLiteral ; section 2.2.2
boolLiteralExpression = boolLiteral ; section 2.2.2
methodCallExpression = boolMethodExpression
/ indexOfMethodCallExpression
/ replaceMethodCallExpression
/ toLowerMethodCallExpression
/ toUpperMethodCallExpression
/ trimMethodCallExpression
/ substringMethodCallExpression
/ concatMethodCallExpression
/ lengthMethodCallExpression
/ yearMethodCallExpression
/ monthMethodCallExpression
/ dayMethodCallExpression
/ hourMethodCallExpression
/ minuteMethodCallExpression
/ secondMethodCallExpression
/ roundMethodCallExpression
/ floorMethodCallExpression
/ ceilingMethodCallExpression
/ distanceMethodCallExpression
/ geoLengthMethodCallExpression
boolMethodExpression = endsWithMethodCallExpression
/ startsWithMethodCallExpression
/ substringOfMethodCallExpression
/ intersectsMethodCallExpression
/ anyMethodCallExpression
/ allMethodCallExpression
endsWithMethodCallExpression = "endswith" [WSP]
"(" [WSP] commonexpression [WSP]
"," [WSP] commonexpression [WSP] ")"
indexOfMethodCallExpression = "indexof" [WSP]
"(" [WSP] commonexpression [WSP]
"," [WSP] commonexpression [WSP] ")"
replaceMethodCallExpression = "replace" [WSP]
"(" [WSP] commonexpression [WSP]
"," [WSP] commonexpression [WSP]
"," [WSP] commonexpression [WSP] ")"
startsWithMethodCallExpression = "startswith" [WSP]
"(" [WSP] commonexpression [WSP]
"," [WSP] commonexpression [WSP] ")"
toLowerMethodCallExpression = "tolower" [WSP]
"(" [WSP] commonexpression [WSP] ")"
toUpperMethodCallExpression = "toupper" [WSP]
"(" [WSP] commonexpression [WSP] ")"
trimMethodCallExpression = "trim" [WSP]
"(" [WSP] commonexpression [WSP] ")"
substringMethodCallExpression = "substring" [WSP]
"(" [WSP] commonexpression [WSP]
"," [WSP] commonexpression [WSP]
[ "," [WSP] commonexpression [WSP] ] ")"
substringOfMethodCallExpression = "substringof" [WSP]
"(" [WSP] commonexpression [WSP]
[ "," [WSP] commonexpression [WSP] ] ")"
concatMethodCallExpression = "concat" [WSP]
"(" [WSP] commonexpression [WSP]
[ "," [WSP] commonexpression [WSP] ] ")"
lengthMethodCallExpression = "length" [WSP]
"(" [WSP] commonexpression [WSP] ")"
getTotalOffsetMinutesMethodCallExpression = "gettotaloffsetminutes" [WSP]
"(" [WSP] commonexpression [WSP] ")"
yearMethodCallExpression = "year" [WSP]
"(" [WSP] commonexpression [WSP] ")"
monthMethodCallExpression = "month" [WSP]
"(" [WSP] commonexpression [WSP] ")"
dayMethodCallExpression = "day" [WSP]
"(" [WSP] commonexpression [WSP] ")"
hourMethodCallExpression = "hour" [WSP]
"(" [WSP] commonexpression [WSP] ")"
minuteMethodCallExpression = "minute" [WSP]
"(" [WSP] commonexpression [WSP] ")"
secondMethodCallExpression = "second" [WSP]
"(" [WSP] commonexpression [WSP] ")"
roundMethodCallExpression = "round" [WSP]
"(" [WSP] commonexpression [WSP] ")"
floorMethodCallExpression = "floor" [WSP]
"(" [WSP] commonexpression [WSP] ")"
ceilingMethodCallExpression = "ceiling" [WSP]
"(" [WSP] commonexpression [WSP] ")"
distanceMethodCallExpression = "geo.distance" [WSP]
"(" [WSP] commonexpression [WSP]
"," [WSP] commonexpression [WSP] ")"
geoLengthMethodCallExpression = "geo.length" [WSP]
"(" [WSP] commonexpression [WSP] ")"
intersectsMethodCallExpression = "geo.intersects" [WSP]
"(" [WSP] commonexpression [WSP]
"," [WSP] commonexpression [WSP] ")"
implicitVariableExpression = "$it"
; references the unnamed outer variable of the query
lambdaVariableExpression = *pchar
; section 3.3 of [RFC3986]
; a identifier/name that complies with EDM identifier rules
lambdaPredicatePrefixExpression = inscopeVariableExpression "/"
lambdaPredicateExpression = boolCommonExpression
; this is a boolCommonExpression with the added restriction that any
; firstMemberExpressions inside the methodPredicateExpression MUST have a prefix of
; lambdaPredicatePrefixExpression
inscopeVariableExpression = implicitVariableExpression | lambdaVariableExpression
; the lambdaVariableExpression must be the name of a variable introduced by either the
; current lambdaMethodCallExpression’s lambdaVariableExpression or via a wrapping
; lambdaMethodCallExpression’s lambdaVariableExpression.
lambdaMethodCallExpression = anyMethodCallExpression | allMethodCallExpression.
anyMethodCallExpression = pathExpression-collection "/"
"any"
"("
[ lambdaVariableExpression ":" lambdaPredicateExpression ]
")"
allMethodCallExpression = pathExpression-collection "/"
"all"
"("
lambdaVariableExpression ":" lambdaPredicateExpression
")"
singlePathExpression = [WSP]
"("singlePathExpression / inscopeVariableExpression
"/" entityNavProperty-et | entityComplexProperty
collectionPathExpression = [WSP] commonexpression [WSP]
singlePathExpression / inscopeVariableExpression
"/"
(entityNavProperty-es | entityCollectionProperty)
functionCallExpression = [ ( memberExpression / firstMemberExpression ) "/"]
functionFQName ; section 2.2.3.1
"(" [functionParametersExpression] ")"
boolFunctionCallExpression = functionCallExpression
; with the added restriction that the specified FunctionImport
; has a ReturnType of Edm.Boolean
functionParametersExpression =
functionParameterExpression *( "," functionParameterExpression)
functionParameterExpression = [WSP]
functionParameterName ; section 2.2.3.1
[WSP] "="
[WSP]
literalExpression / structuralValue / entityReference
[WSP]
structuralValue = ; a Verbose JSON encoding of a ComplexType, Multi-value, Entity or a
; collection of Entities
entityReference = "KEY("
[ entityContainer "." ]
entitySet
"("keyPredicate")"
")"
["/" namespaceQualifiedEntityType ]
; refers a single Entity by key, and optionally allows a cast to a
; derived type.
Listing: Augmented BNF for Query Option Expressions
A data service MAY<7> support some or all of the boolCommonExpressions for the filter ($filter) system query option. A data service MAY<8> support some or all of the commonExpressions for the orderby ($orderby) query option.
If a data service does not support a given expression, it MUST reject any requests which contain the unsupported expression.
A data service MAY reject any requests that contain expressions not defined in this document.
Common expressions SHOULD be constructed and evaluated according to the rules defined in common expression syntax for each specific expression type.