함수(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을 참조하십시오.

설명

함수 시그니처가 다르면 이름이 같은 여러 함수를 인라인으로 선언할 수 있습니다. 자세한 내용은 Function Overload Resolution을 참조하세요.

인라인 함수는 Entity SQL 명령에서 정의된 이후에야 해당 명령에서 호출될 수 있습니다. 그러나 인라인 함수는 호출된 함수가 정의되기 이전 또는 이후에 다른 인라인 함수 내에서 호출될 수 있습니다. 다음 예제에서는 함수 B가 정의되기 전에 함수 A에서 함수 B를 호출합니다.

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

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

A()

자세한 내용은 방법: 사용자 정의 함수 호출을 참조하세요.

함수는 모델 자체에서도 선언할 수 있습니다. 모델에서 선언된 함수는 명령에서 인라인으로 선언된 함수와 동일한 방식으로 실행됩니다. 자세한 내용은 사용자 정의 함수를 참조하세요.

예 1

다음 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

예제 2

다음 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)

참고 항목