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 명령에서 호출할 수 있습니다. 그러나 호출된 함수가 정의되기 전이나 후에 다른 인라인 함수 내에서 인라인 함수를 호출할 수 있습니다. 다음 예제에서 함수 A는 함수 B가 정의되기 전에 함수 B를 호출합니다.
Function A() as ('A calls B. ' + B())
Function B() as ('B was called.')
A()
자세한 내용은 방법: User-Defined 함수 호출을 참조하세요.
모델 자체에서 함수를 선언할 수도 있습니다. 모델에서 선언된 함수는 명령에서 인라인으로 선언된 함수와 동일한 방식으로 실행됩니다. 자세한 내용은 User-Defined 함수를 참조하세요.
예제 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)