FUNCTION (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 命令中定义了内联函数后,才可以在该命令中调用内联函数。 但是,在定义被调函数之前或之后,都可以在一个内联函数中调用另一个内联函数。 在下面的示例中,函数 A 在定义函数 B 之前调用函数 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)

请参阅