构造类型 (Entity SQL)

Entity SQL 提供了三种构造函数:行构造函数、命名类型构造函数和集合构造函数。 

行构造函数

使用 Entity SQL 中的行构造函数可以从一个或多个值构造结构上类型化的匿名记录。 行构造函数的结果类型为行类型,其字段类型对应于用于构造该行的值的类型。 例如,下面的表达式构造一个类型为 Record(a int, b string, c int) 的值:

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

如果没有为行构造函数中的表达式提供别名,则实体框架会尝试生成一个别名。 有关更多信息,请参见标识符 (Entity SQL)中的“别名规则”一节。

以下规则适用于在行构造函数中指定表达式别名:

  • 行构造函数中的表达式不能引用同一构造函数中的其他别名。

  • 同一行构造函数中的两个表达式不能具有相同别名。

有关行构造函数的更多信息,请参见 ROW (Entity SQL)

集合构造函数

使用 Entity SQL 中的集合构造函数可以从值列表创建多重集实例。 该构造函数中的所有值都必须为互兼容的 T 类型,并且该构造函数生成 Multiset<T> 类型的集合。 例如,下面的表达式创建整数集合:

Multiset(1, 2, 3)

{1, 2, 3}

因为无法确定元素类型,所以不能使用空的多重集构造函数。 下面的表达式无效:

multiset() {}

有关更多信息,请参见 MULTISET (Entity SQL)

命名类型构造函数(NamedType 初始值设定项)

Entity SQL 允许类型构造函数(初始值设定项)创建命名复杂类型和命名实体类型的实例。 例如,下面的表达式创建 Person 类型的实例。

Person("abc", 12)

下面的表达式创建复杂类型的实例。

MyModel.ZipCode(‘98118’, ‘4567’)

下面的表达式创建嵌套复杂类型的实例。

MyModel.AddressInfo('My street address', 'Seattle', 'WA', MyModel.ZipCode('98118', '4567'))

下面的表达式创建具有嵌套复杂类型的实体的实例。

MyModel.Person("Bill", MyModel.AddressInfo('My street address', 'Seattle', 'WA', MyModel.ZipCode('98118', '4567')))

下面的示例演示如何将复杂类型的属性初始化为 null。 MyModel.ZipCode(‘98118’, null)

假定该构造函数的参数的顺序与该类型的属性的声明顺序相同。

有关更多信息,请参见命名类型构造函数 (Entity SQL)

另请参见

概念

Entity SQL 参考
Entity SQL 概述
类型系统 (Entity SQL)