Compartilhar via


FUNCTION (Entity SQL)

Define uma função no escopo de um comando de consulta SQL de entidade.

Sintaxe

FUNCTION function-name  
( [ { parameter_name <type_definition>
        [ ,...n ]  
  ]  
) AS ( function_expression )
  
<type_definition>::=  
    { data_type | COLLECTION ( <type_definition> )
                | REF ( data_type )
                | ROW ( row_expression )
        }

Argumentos

function-name
Nome da função.

parameter-name
Nome de um parâmetro na função.

function_expression
Uma expressão SQL de entidade válida que é a função. O comando na função pode agir em parameter_name parâmetros passados para a função.

data_type
Nome de um tipo com suporte.

COLEÇÃO ( <type_definition> )
Uma expressão que retorna uma coleção de tipos, linhas ou referências com suporte.

REF (data_type)
Uma expressão que retorna uma referência a um tipo de entidade.

LINHA (row_expression)
Uma expressão que retorna registros anônimos, digitado estruturalmente de um ou mais valores. Para obter mais informações, consulte ROW.

Observações

Várias funções com o mesmo nome podem ser declaradas embutidas, desde que as assinaturas de função sejam diferentes. Para obter mais informações, consulte Resolução de Sobrecarga de Função.

Uma função embutida pode ser chamada em um comando SQL de entidade somente depois de ter sido definida nesse comando. No entanto, uma função embutida pode ser chamada dentro de outra função embutida antes ou depois que a função chamada tiver sido definida. No exemplo a seguir, a função A chama a função B antes que a função B seja definida:

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

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

A()

Para obter mais informações, consulte Como chamar uma função User-Defined.

As funções também podem ser declaradas no próprio modelo. As funções declaradas no modelo são executadas da mesma forma que as funções declaradas embutidas no comando. Para obter mais informações, consulte User-Defined Functions.

Exemplo 1

O comando SQL da entidade a seguir define uma função Products que usa um valor inteiro para filtrar os produtos retornados.

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

Exemplo 2

O comando SQL da entidade a seguir define uma função StringReturnsCollection que usa uma coleção de cadeias de caracteres para filtrar os contatos retornados.

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)

Consulte também