2013-10-15 4 views
0

Я получаю эту ошибку: «Неизвестный тип выражения для обработки: EntitySetExpression» при попытке фильтрации или заказа на свойство навигации Odata.Jaydata Odata Неизвестный тип выражения для обработки: EntitySetEx

App.store.Person.include('Friend') 
    .filter("it.age >= 10 && it.Friend.age >=10").toArray(); 

я получаю ту же ошибку, если я включаю свойство навигации в качестве функции заказа:

App.store.Person.include('Friend').orderBy("it.Friend.age").toArray(); 

любая идея, почему это не должно работы? thanks

EDIT: Мой вопрос был немного обманчивым! я попытался фильтровать свойство навигации в том же запросе. Я также ошибался, думая, что JayData вернет свойства навигации как объекты Queryable.

+0

Включая будет переведен в $ expand при использовании odata. вы не можете сделать фильтр или orderby на $ expand. Это ограничение одаты, а не джайдата. На самом деле это было бы сложно и в sql. –

ответ

1

Я думаю, что Человек и Friend является 1-N отношение так для фильтра вам потребуется операция некоторые() или каждый(), увидеть это: Using JayData to filter Header Detail Table - Inner Join SQL, oData

Для OrderBy() Я все еще смотря

+0

спасибо @Gabor, я видел это сообщение, но, к сожалению, он фактически не возвращает отфильтрованное свойство навигации, а скорее родительский объект, у которого есть некоторые или все элементы, которые соответствуют предикату. Возможно, я делаю это неправильно. я должен был бы создать 2 отдельных запроса. Я иногда забываю, что JSQL не LINQ! – Jmorvan

+1

это должно работать, пожалуйста, попробуйте: 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(); –

+1

помните, что он возвращает всех Личность, которая старше 10 лет, и любой из его друзей старше 10 лет, но вернет всех своих друзей не только своим друзьям старше 10 лет! –

Смежные вопросы