Compartilhar via


FUNÇÃO (Entity SQL)

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

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 em função.

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

data_type
Nome de um tipo suportado.

COLLECTION ( <type_definition> )
Uma expressão que retorna uma coleção de tipos suportados, de linhas, ou de referências.

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

ROW (row_expression)
Uma expressão que retorna registros anônimos, tipados estrutural de um ou mais valores. Para obter mais informações, confira ROW.

Comentários

Várias funções com o mesmo nome podem ser declarados embutidos, como as assinaturas de função são diferentes. Para obter mais informações, confira Resolução de Sobrecarga de Função.

Uma função in-line pode ser chamado em um comando de Entity SQL somente após foi definida no comando. No entanto, uma função in-line pode ser chamada dentro de outra função in-line tanto antes ou após a função chamada foi definido. No exemplo a seguir, funciona a função B de chamadas de antes que a função B é definida:

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

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

A()

Para obter mais informações, confira Como chamar uma função definida pelo usuário.

As funções podem também ser declaradas no próprio modelo. As funções declaradas no modelo são executadas da mesma forma como as funções está embutido no comando. Para obter mais informações, confira Ferramentas definidas pelo usuário.

Exemplo 1

O seguinte comando de Entity SQL define uma função Products que recebe 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 seguinte comando de Entity SQL define uma função StringReturnsCollection que utiliza 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)

Confira também