SELECT (Entity SQL)

指定查询所返回的元素。

SELECT [ ALL | DISTINCT ] [ topSubclause ] aliasedExpr 
      [{ , aliasedExpr }]
or
SELECT VALUE [ ALL | DISTINCT ] [ topSubclause ] expr

参数

  • ALL
    指定结果集中可以出现重复项。ALL 为默认值。
  • DISTINCT
    指定结果集中只能出现唯一的结果。
  • VALUE
    仅允许指定一个项,且不添加到行包装上。
  • topSubclause
    任何指示从查询返回的首批结果数的有效表达式(形式为 top (expr))。

    使用 ORDER BY (Entity SQL) 运算符的 LIMIT 参数也可以选择结果集中的前 n 个项。

  • aliasedExpr
    形式如下的表达式:

    expr as identifier | expr

  • expr
    文本或表达式。

备注

SELECT 子句在计算 FROM (Entity SQL)GROUP BY (Entity SQL)HAVING (Entity SQL) 子句之后进行计算。SELECT 子句只能引用当前处于范围内的项(FROM 子句指定的范围或外部范围)。如果指定了 GROUP BY 子句,则仅允许 SELECT 子句引用 GROUP BY 键的别名。仅允许在聚合函数中引用 FROM 子句项。

跟在 SELECT 关键字之后的一个或多个查询表达式的列表称为“选择列表”,更加正式的名称为“投影”。最普通的投影形式为单个查询表达式。如果从集合 collection1 选择一个成员member1,则会生成 collection1 中每个对象的所有member1值的新集合(如下面的示例所示)。

SELECT collection1.member1 FROM collection1

例如,如果customers是类型为 Customer 的集合,且该类型有类型为 string 的属性Name,则从customers选择Name将生成一个字符串集合(如下面的示例所示)。

SELECT customers.Name FROM customers AS c

也可以使用 JOIN 语法(FULL、INNER、LEFT、OUTER、ON 和 RIGHT)。ON 是内部联接的必需语法,但不允许用于交叉联接。

行和值选择子句

Entity SQL 支持 SELECT 子句的两种变体。第一种变体是行选择,由 SELECT 关键字标识,可以用于指定应提取出的一个或多个值。由于返回值的两侧会隐式添加行包装,因此查询表达式的结果始终为行的多集。

行选择中的每个查询表达式都必须指定一个别名。如果不指定别名,Entity SQL 会尝试使用别名生成规则生成别名。

SELECT 子句的另一种变体为值选择,由 SELECT VALUE 关键字标识。该变体仅允许指定一个值,且不添加行包装。

行选择总是可通过 VALUE SELECT 进行表示(如下面的示例所示)。

SELECT 1 AS a, "abc" AS b, a+34 AS c
SELECT VALUE ROW(1 AS a, "abc" AS b, a+34 AS c) 

All 和 Distinct 修饰符

Entity SQL 中的两种 SELECT 变体都允许指定 ALL 或 DISTINCT 修饰符。如果指定 DISTINCT 修饰符,则将从查询表达式(直到并包括 SELECT 子句)生成的集合中消除重复项。如果指定 ALL 修饰符,则不消除重复项;ALL 为默认值。

与 Transact-SQL 的区别

与 Transact-SQL 不同,Entity SQL 不支持在 SELECT 子句中使用 * 参数。Entity SQL 允许查询通过从 FROM 子句引用集合别名来提取出完整的记录(如下面的示例所示)。

SELECT * FROM T1, T2

上面的 Transact-SQL 查询表达式在 Entity SQL 中表示如下。

SELECT a1, a2 FROM T1 AS a1, T2 AS a2

示例

下面的 Entity SQL 查询使用 SELECT 运算符指定查询要返回的元素。此查询基于 AdventureWorks 销售模型。若要编译并运行此查询,请执行下列步骤:

  1. 执行如何:执行返回 StructuralType 结果的查询 (EntityClient) 中的过程。

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

SELECT VALUE product FROM AdventureWorksEntities.Product AS product

输出如下所示:

ProductID: 1
Name: Adjustable Race
ProductNumber: AR-5381
MakeFlag: False
ProductID: 2
Name: Bearing Ball
ProductNumber: BA-8327
MakeFlag: False
ProductID: 3
Name: BB Ball Bearing
ProductNumber: BE-2349
MakeFlag: True
ProductID: 4
Name: Headset Ball Bearings
ProductNumber: BE-2908
MakeFlag: False
ProductID: 316
Name: Blade
ProductNumber: BL-2036
MakeFlag: True
...

另请参见

参考

TOP (Entity SQL)

概念

查询表达式 (Entity SQL)
Entity SQL 参考