0

是否可以在实体框架的模型定义函数中定义子查询?我们有一种情况,我们有一个客户对象,该对象在另一个表中具有名称历史记录。我们希望返回最新的名称作为该客户对象的一部分。

模型定义的函数可能如下所示:

<Function Name="CurrentName" ReturnType="Edm.String">
   <Parameter Name="e" Type="Model.Customer"/>
   <DefiningExpression>
      (select top(1) n.LegalName from Entities.CustomerNames as n order by n.EffectiveDate Desc )
  </DefiningExpression>
  </Function>

不幸的是,上述方法不起作用。我们得到一个错误:

在函数 'SNCCModel.CurrentLegalName' 的声明中指定的结果类型 'Edm.String' 与结果类型 'Transient.collection[Transient.rowtype(LEGAL_NAME,Edm.String(Nullable=True,DefaultValue=,MaxLength= 512,Unicode=False,FixedLength=False))]' 函数定义

有什么建议么?这应该工作吗?抱歉,重构我们的数据模型以将最新的名称存储在客户表中是不可行的。

谢谢,瑞克

4

1 回答 1

0

尝试以下查询:

ANYELEMENT(select VALUE top(1) n.LegalName from Entities.CustomerNames as n order by n.EffectiveDate Desc )

基本上,查询返回的是一组行,预期的结果类型是字符串。通过指定 select VALUE,您摆脱了行(并且仅投影字符串集合),并通过将其全部包装在 ANYELEMENT 中,您将结构展平并仅从结果集合中返回单个元素(在这种情况下,是唯一的元素) .

于 2013-09-03T22:43:19.560 回答