在实体框架中的模型定义函数中定义子查询

时间:2013-09-03 16:37:25

标签: entity-framework entity-sql

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

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

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

不幸的是,上述方法无效。我们收到错误:

  

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

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

谢谢, 瑞克

1 个答案:

答案 0 :(得分:0)

尝试以下查询:

ANYELEMENT(从Entities.CustomerNames中选择VALUE top(1)n.LegalName作为n.EffectiveDate Desc的n order)

基本上,查询返回一组行,预期结果类型为String。通过指定select VALUE,你可以去除行(并且只是项目集合的项目),并通过将它们全部包装在ANYELEMENT中,你展平结构并从结果集合中返回单个元素(在这种情况下,唯一的元素)