是否可以在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))]'的函数定义
有什么建议吗?这应该有用吗?很抱歉,但重构我们的数据模型以将最新名称存储在客户表中是不可取的。
谢谢, 瑞克
答案 0 :(得分:0)
尝试以下查询:
ANYELEMENT(从Entities.CustomerNames中选择VALUE top(1)n.LegalName作为n.EffectiveDate Desc的n order)
基本上,查询返回一组行,预期结果类型为String。通过指定select VALUE,你可以去除行(并且只是项目集合的项目),并通过将它们全部包装在ANYELEMENT中,你展平结构并从结果集合中返回单个元素(在这种情况下,唯一的元素)