'<;字段名称>';不是类型'<;类型>';在当前加载的架构中

本文关键字:类型 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>