(У меня было много проблем с тем, чтобы озадачить ваш предикат, так что возьмите это с крошкой соли.)
Я думаю, что вы делаете это слишком сложно. Вы должны упростить пути доступа. Каждый EntityB имеет отношение «один к одному» с EntityC, поэтому для поиска по объектам EntityB все, что вам нужно сделать, это проверить EntityB.entityCRelationshipName.entityCAttribute
. Так что-то вроде:
ALL B.EntityC.name like %@
В любом случае (если я правильно читаю предикат) это:
SUBQUERY($B.EntityC, $EntityC, $EntityC.name like %@)
может возвращать только один объект вместо коллекции. Поэтому предикат не сможет рассчитывать на него. Вот что означает ваше сообщение об ошибке.
Я предлагаю использовать редактор предикатов в редакторе модели данных для хеширования предикатов перед их сохранением.