ORDER BY (Entity SQL)
指定用于 SELECT 语句所返回的对象的排序顺序。
语法
[ ORDER BY
{
order_by_expression [SKIP n] [LIMIT n]
[ COLLATE collation_name ]
[ ASC | DESC ]
}
[ ,…n ]
]
参数
order_by_expression
指定作为排序依据的属性的任何有效查询表达式。 可以指定多个排序表达式。 ORDER BY 子句中排序表达式的顺序将决定排序后结果集的结构。
COLLATE {collation_name} 指定应根据 collation_name
中所指定的排序规则执行 ORDER BY 运算。 COLLATE 仅适用于字符串表达式。
ASC 指定所指定属性中的值应按升序排序,即从最低值往最高值排序。 这是默认值。
DESC 指定所指定属性中的值应按降序排序,即从最高值往最低值排序。
LIMIT n
仅选择前 n
个项。
SKIP n
会跳过前 n
个项。
备注
ORDER BY 子句在逻辑上应用于 SELECT 子句的结果。 ORDER BY 子句可以使用选择列表中各项的别名来引用这些项。 ORDER BY 子句也可引用当前处于作用域内的其他变量。 但如果用 DISTINCT 修饰符指定了 SELECT 子句,则 ORDER BY 子句只能引用 SELECT 子句中的别名。
SELECT c AS c1 FROM cs AS c ORDER BY c1.e1, c.e2
ORDER BY 子句中的每个表达式的计算结果都必须是可按顺序比较是否不等(小于或大于,等等)的某一类型。 这些类型通常为标量基元类型,如数字、字符串和日期。 可比较类型的 RowTypes 也可按顺序比较。
如果代码循环访问一个有序集(顶级投影除外),则不能确保输出会保持其顺序。
在以下示例中,保证保留顺序:
SELECT C1.FirstName, C1.LastName
FROM AdventureWorks.Contact as C1
ORDER BY C1.LastName
在以下查询中,嵌套查询的排序被忽略:
SELECT C2.FirstName, C2.LastName
FROM (SELECT C1.FirstName, C1.LastName
FROM AdventureWorks.Contact as C1
ORDER BY C1.LastName) as C2
若要执行有序的 UNION、UNION ALL、EXCEPT 或 INTERSECT 运算,请使用以下模式:
SELECT ...
FROM ( UNION/EXCEPT/INTERSECT operation )
ORDER BY ...
受限制的关键字
下列关键字在 ORDER BY
子句中使用时,必须用引号括起:
CROSS
FULL
KEY
LEFT
ORDER
OUTER
RIGHT
ROW
值
嵌套查询排序
在实体框架中,嵌套表达式可以放在查询的任何位置,不保留嵌套查询的顺序。
以下查询将按姓氏对结果进行排序:
SELECT C1.FirstName, C1.LastName
FROM AdventureWorks.Contact as C1
ORDER BY C1.LastName
在以下查询中,嵌套查询的排序被忽略:
SELECT C2.FirstName, C2.LastName
FROM (SELECT C1.FirstName, C1.LastName
FROM AdventureWorks.Contact as C1
ORDER BY C1.LastName) as C2
示例
下面的实体 SQL 查询使用 ORDER BY 运算符来指定用于 SELECT 语句所返回的对象的排序顺序。 此查询基于 AdventureWorks 销售模型。 若要编译并运行此查询,请执行下列步骤:
执行 How to: Execute a Query that Returns StructuralType Results中的过程。
将以下查询作为参数传递给
ExecuteStructuralTypeQuery
方法:
SELECT VALUE p FROM AdventureWorksEntities.Products
AS p ORDER BY p.ListPrice