Поделиться через


FUNCTION (Entity SQL)

Определяет функцию в рамках команды запроса Entity SQL.

FUNCTION function-name
( [ { parameter_name <type_definition> 
        [ ,...  n ]
  ]
) AS ( function_expression ) 

<type_definition>::=
    { data_type | COLLECTION ( <type_definition> ) 
                | REF ( data_type ) 
                | ROW ( row_expression ) 
        }  

Аргументы

  • function-name
    Имя функции.
  • parameter-name
    Имя параметра функции.
  • function_expression
    Допустимое выражение Entity SQL, представляющее функцию. Команда в функции может действовать, используя параметры parameter_name, переданные функции.
  • data_type
    Имя поддерживаемого типа.
  • COLLECTION ( <type_definition> )
    Выражение, возвращающее коллекцию поддерживаемых типов, строк или ссылок.
  • REF ( data_type )
    Выражение, возвращающее ссылку на тип сущности.
  • ROW ( row_expression )
    Выражение, возвращающее анонимные структурно типизированные записи из одного или нескольких значений. Дополнительные сведения см. в разделе ROW (Entity SQL).

Замечания

Объявить встроенными можно несколько функций с одинаковыми именами при условии, что эти функции имеют различные сигнатуры. Дополнительные сведения см. в разделе Разрешение перегруженных функций (язык Entity SQL).

Встроенная функция может быть вызвана командой SQL только после определения ее в этой команде. Однако встроенная функция может быть вызвана в пределах другой встроенной функции как до, так и после определения вызываемой функции. В следующем примере функция A вызывает функцию B до того, как функция B была определена.

Function A() as ('A calls B. ' + B())

Function B() as ('B was called.')

A()

Дополнительные сведения см. в разделе Как вызвать определяемую пользователем функцию (платформа Entity Framework).

Функции также могут быть объявлены внутри самой модели. Функции, объявленные в модели, выполняются так же, как и функции, объявленные встроенными в команде. Дополнительные сведения см. в разделе Определяемые пользователем функции (Entity SQL).

Пример

В следующей команде Entity SQL определяется функция Products, использующая целочисленное значение для фильтрации возвращаемых продуктов.

USING Microsoft.Samples.Entity;
FUNCTION Products(listPrice Int32) AS 
(
SELECT VALUE p FROM AdventureWorksEntities.Products AS p WHERE p.ListPrice >= listPrice
)
select p from Products(@price) as p

В следующей команде Entity SQL определяется функция StringReturnsCollection, использующая коллекцию строк для фильтрации возвращаемых контактов.

USING Microsoft.Samples.Entity;
FUNCTION GetSpecificContacts(Ids Collection(Int32)) AS 
(
SELECT VALUE id FROM Ids AS id WHERE id < @price
)
GetSpecificContacts(SELECT VALUE c.ContactID FROM AdventureWorksEntities.Contacts as c)

См. также

Основные понятия

Справочник по Entity SQL
Язык Entity SQL