FUNCTION (实体 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
支持的类型的名称。

集合( <type_definition>
返回受支持类型、行或引用集合的表达式。

REF data_type
返回对实体类型的引用的表达式。

ROW row_expression
一个表达式,该表达式从一个或多个值返回匿名的结构化类型记录。 有关详细信息,请参阅 ROW

注解

只要函数签名不同,就可以以内联方式声明多个具有相同名称的函数。 有关详细信息,请参阅 函数重载解析

仅在该命令中定义内联函数后,才能在实体 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)

另请参阅