ORDER BY (实体 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 指定应按降序对指定属性中的值进行排序,从最大值到最小值。

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 子句中的每个表达式都必须计算为一些类型,这些类型可以比较有序不相等(小于或大于等)。 这些类型通常是标量基元,如数字、字符串和日期。 可比较类型的行类型也是可比较的。

如果代码循环访问排序集,而不是顶级投影,则不保证输出保留其顺序。

在以下示例中,保证保留顺序:

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 时,以下关键字必须用引号括起来:

  • 十字架

  • 完整的

  • 钥匙

  • LEFT

  • 次序

  • 外部的

  • RIGHT

  • ROW

  • VALUE

对嵌套查询进行排序

在 Entity Framework 中,嵌套表达式可以放置在查询中的任意位置:嵌套查询的顺序不会保留。

以下查询将按姓氏对结果进行排序:

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

示例:

以下 Entity SQL 查询使用 ORDER BY 运算符指定在 SELECT 语句中返回的对象上使用的排序顺序。 查询基于 AdventureWorks 销售模型。 若要编译并运行此查询,请执行以下步骤:

  1. 按照作方法中的过程作 :执行返回 StructuralType 结果的查询

  2. 将以下查询作为参数传递给 ExecuteStructuralTypeQuery 方法:

SELECT VALUE p FROM AdventureWorksEntities.Products 
    AS p ORDER BY p.ListPrice

另请参阅