'<;字段名称>';不是类型'<;类型>';在当前加载的架构中
本文关键字:类型 gt lt 加载 字段 | 更新日期: 2023-09-27 17:59:54
我在EDMX的CSDL中定义了以下函数。
<Function Name="GetSprintDuration" ReturnType="Edm.Decimal">
<Parameter Name="sprintId" Type="Edm.Int32" />
<DefiningExpression>
SUM( SELECT VALUE h.Duration
FROM ApplicationEntities.Hours as h
WHERE h.Story.Project.SprintId = sprintId)
</DefiningExpression>
</Function>
我访问该函数的代码如下:
[EdmFunction("ApplicationModel", "GetSprintDuration")]
public decimal? GetSprintDuration(int sprintId)
{
return this.QueryProvider.Execute<decimal?>(Expression.Call(
Expression.Constant(this),
(MethodInfo)MethodInfo.GetCurrentMethod(),
Expression.Constant(sprintId, typeof(int))));
}
当我调用此方法时,我收到以下错误:
"SprintId"不是类型的成员'ApplicationModel。中的项目当前加载的架构。
QueryProvider时生成错误。执行被调用:
Line 17: public decimal? GetSprintDuration(int sprintId)
Line 18: {
Line 19: return this.QueryProvider.Execute<decimal?>(Expression.Call(
Line 20: Expression.Constant(this),
Line 21: (MethodInfo)MethodInfo.GetCurrentMethod(),
如果我将函数更改为类似于:
<Function Name="GetSprintDuration" ReturnType="Edm.Decimal">
<Parameter Name="sprintId" Type="Edm.Int32" />
<DefiningExpression>
SUM( SELECT VALUE h.Duration
FROM ApplicationEntities.Hours as h
WHERE h.HourId != 0)
</DefiningExpression>
</Function>
我的应用程序正常工作。。。由于某些原因,我无法访问完整的实体模型。有没有一种方法可以让我访问完整的实体模型,或者这是不可能的?
提前感谢!
在@Henk Holterman的帮助下,我解决了我的问题。。。我没有意识到ESQL支持JOIN,所以下面是工作代码的样子:
<Function Name="GetSprintDuration" ReturnType="Edm.Decimal">
<Parameter Name="sprintId" Type="Edm.Int32" />
<DefiningExpression>
SUM( SELECT VALUE h.Duration
FROM ApplicationEntities.Hours as h
JOIN ApplicationEntities.Stories as s on h.StoryId == s.StoryId
WHERE s.SprintId == sprintId )
</DefiningExpression>
</Function>