要处理的Jaydata Odata未知表达式类型:EntitySetEx

要处理的Jaydata Odata未知表达式类型:EntitySetEx,odata,jaydata,datajs,Odata,Jaydata,Datajs,我收到以下错误:“要处理的未知表达式类型:EntitySetExpression” 尝试对Odata导航属性进行筛选或排序时 App.store.Person.include('Friend') .filter("it.age >= 10 && it.Friend.age >=10").toArray(); 如果在order函数中包含导航属性,则会出现相同的错误: App.store.Person.include('Friend').orderBy(

我收到以下错误:“要处理的未知表达式类型:EntitySetExpression” 尝试对Odata导航属性进行筛选或排序时

    App.store.Person.include('Friend')
    .filter("it.age >= 10 && it.Friend.age >=10").toArray();
如果在order函数中包含导航属性,则会出现相同的错误:

App.store.Person.include('Friend').orderBy("it.Friend.age").toArray();
你知道为什么这样不行吗? 谢谢

编辑:
我的问题有点误导人!我试图在同一个查询中过滤导航属性本身。我还错误地认为JayData会将导航属性作为可查询对象返回。

我猜Person和Friend是1-N关系,因此对于筛选器,您需要some()或every()操作,请参见以下内容:


对于orderby(),我仍在寻找

谢谢@Gabor,我看过这篇文章,但不幸的是,它实际上并没有返回过滤的导航属性,而是返回父对象,它有一些或所有与谓词匹配的项。也许我做错了。我必须创建两个单独的查询。我有时会忘记JSQL不是LINQ!这应该可以,请尝试:var subquery=App.store.Friends.filter('it.age>=10');App.store.Person.include('Friend').filter(“it.age>=10&&it.Friend.some(this.subquery)”,{subquery:subquery}.toArray();请注意,它将返回所有年龄超过10岁的人和任何年龄超过10岁的朋友,但将返回所有朋友,而不仅仅是年龄超过10岁的朋友!您不能有包含的条件。。。你有两个选择:1。在客户端,这真的是一个简单的一行2。将您的筛选器更改为按朋友而不是按个人进行筛选,如Friend.filter('it.age>10和it.Person.age>10')。include('Person')。但在这种情况下,朋友不会按个人进行分组……而且,您也不能这样做。orderBy('it.Friend.age'),您可以在客户端对其进行排序,当您使用odata时,tooInclude将转换为$expand。不能对$expand执行筛选或排序。这是odata的限制,而不是jaydata。实际上,用sql也很难。