Здесь нет хорошего ответа.
В InitializeService (..) можно использовать две настройки * .. 1003 *
config.SetEntitySetAccessRule("Feed", EntitySetRights.ReadSingle);
config.SetEntitySetPageSize("Feed", 1);
К сожалению, не делайте точно, что вы хотите:
EntitySetRights.ReadSingle
ограничивает вас возвратом только одного объекта из этого набора. Что не удается, потому что это не позволяет / Categories (1) / Products И также позволяет / Categories? $ Filter = ... возвращать строку.
SetEntitySetPageSize
ограничивает объем начальной нагрузки, попадающей на сервер, только одной записью, но вы можете следовать $ skiptoken, чтобы идти и получать оставшиеся данные по одной записи за раз, и точно так же, как (1) он разрешает произвольные запросы не только ключевые предикаты.
Это оставляет вам только один реалистичный вариант. Посещение выражения LINQ и разработка, если вы разрешите то, что предпринимается.
Поскольку вы используете провайдер Reflection, вам, по сути, нужно обернуть IQueryables, возвращаемые из вашего класса 'context', и искать недопустимые запросы перед их передачей.
Не для слабонервных.
Если вы решите пойти по этому пути, вы найдете мой пример упаковки IQueryable полезным, и вам следует проверить серию публикаций в блоге Viteks по выражениям Data Service тоже.
Надеюсь, это поможет
Алекс (менеджер программ OData)