Конструирование типов (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 Framework попытается сформировать его. Дополнительные сведения см. в подразделе «Правила присвоения псевдонимов» раздела Идентификаторы (язык 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)