使用“任何”查询DTO导航属性时出错

时间:2014-10-31 19:47:24

标签: vb.net breeze

在我的BreezeController我有一个返回带有两个属性的DTO的方法。一个属性是我的一个实体的导航属性,另一个属性是布尔值:

Public Function ProjectList() As IQueryable
    Return From p In _contextProvider.Context.Projects
           Where Not p.IsDeleted
           Select New ProjectListItem() With {
               .Project = p,
               .HasTasks = (From t In _contextProvider.Context.ProjectTasks Where t.ProjectID = p.ID).Any()
           }
End Function

Public Class ProjectListItem
    Public Property Project As Project
    Public Property HasTasks As Boolean
End Class

针对此方法的简单查询工作正常,但我的Project类有一组项目经理,并使用" any"在将查询发送到服务器之前,在Breeze客户端代码中对此集合的查询失败,并显示以下错误消息:

Exception was thrown at line 10698, column 13 in http://localhost:2780/myapp/Scripts/breeze.debug.js
0x800a138f - JavaScript runtime error: Unable to get property 'isAnonymous' of undefined or null reference

这是proto._validate的{​​{1}}方法,其中FnNode为空。

我的查询(我试图找到特定项目经理的所有项目)是分段建立的,但相关部分是:

entityType

我创建其他谓词并通过相同的通用逻辑运行它们并且它们工作正常,所以它似乎仅限于"任何"查询,例如这个有用...

var p = breeze.Predicate.create("ProjectManagerID", op.Equals, id);
var predicate = breeze.Predicate.create("Project.ProjectManagers", "any", p);

// code common to all queries...
var query = breeze.EntityQuery.from("ProjectList");
query = query.where(predicate);
query = query.select("Project.Prop1,Project.Prop2,Project.etc,HasTasks");
return query.using(this.manager).execute();

我仍在使用Breeze 1.4.16(WebAPI v1,.NET 4.0),但尝试将Breeze.Client包更新为1.5.1,这没什么区别。

任何想法我做错了什么?

如果我手动构建我正在寻找的OData查询,那么我得到了我想要的结果,例如。

predicate = breeze.Predicate.create("Project.ClientNumber", op.Contains, search)
    .or("Project.ClientName", op.Contains, search)
    .or("Project.Notes", op.Contains, search);

0 个答案:

没有答案