Odata расширяется с помощью предложения where
Привет Господа,
У меня есть служба OData, которая используется в приложении.
В этом приложении я стараюсь:
DataFromService = ODataStore.MarinGlobalService.Instance.Service.Users .Expand(x => x.ApplicationUsers.Where(y => !y.IsDeleted));
Это приводит к ошибке:
Выражение 'x => x.ApplicationUsers.Где(y => Not(y.IsDeleted))' не является допустимым выражением для навигационного пути. Поддерживаются только операции внутри тела лямбда-выражения являются MemberAccess и имеющих тип. Выражение должно содержать по крайней мере один MemberAccess и он не может закончиться, имеющих тип.
Как я могу проверить, что только IsDeleted = false включены в результат расширения?
Что я уже пробовал:
Мои услуги для группы в
.Where(x => !x.IsDeleted)
[EnableQuery(MaxExpansionDepth=8)] public IQueryable<UserGroup> GetUserGroups() { return db.UserGroups.Where(x => !x.IsDeleted); }
И все же ...
Expand
функция дает мне строки данных, которые имеют IsDeleted
= истинный.
Richard Deeming
Вы включили вложенные фильтры на сервере?
Вложенные $фильтр $разверните службы | Майкрософт документы[^]
Какую клиентскую библиотеку OData вы используете?
Herman<T>.Instance
Я использую подключенные сервисы OData
Richard Deeming
Основываясь на сообщении об ошибке, я подозреваю, что вы используете:
Гитхаб - службы/Службы OData.объем: ODataLib: протоколом открытые данные .Net библиотек и фреймворков[^]
(Прямо или косвенно.)
Похоже, что в этом проекте есть различные проблемы, связанные с фильтрованными операциями "расширения". Я не вижу ничего, что напрямую связано с вашим сообщением об ошибке. Возможно, стоит зарегистрировать там проблему.
Herman<T>.Instance
Я использую протокол V3. Я только что начал обновление до версии v4 и повторил эту проблему. У вас есть
конфиг.Фильтр().Разверните().Выберите().Предложение orderby().MaxTop(null).Рассчитывать();
добавлен
Herman<T>.Instance
Библиотека = Microsoft.aspnet.Службы OData.
Обновление до версии V4 и добавление вложенного фильтра $в $expand не помогло.
Есть еще варианты?
Richard Deeming
Как я уже сказал, вам может понадобиться зарегистрировать проблему в проекте GitHub, чтобы посмотреть, смогут ли они ее исправить.
Herman<T>.Instance
Ты в порядке с маршрутами?
У меня есть функция и клиент Odata создает
http://wrk2198:80/marinservices/ProjectUsedModels(modelNumber='10000')
Где говорит моя служба
[EnableQuery]
[ODataRoute("ProjectUsedModels?modelNumber={modelNumber}")]
public IEnumerable<projectusedmodels_result> Get([FromODataUri]string modelNumber = "")
Почему маршрут в сервисе не используется клиентом?
Richard Deeming
Я не знаю, как клиент может что-то знать о маршрутах сервера?
Все примеры в документации, по-видимому, используют аналогичное соглашение с URL-адресом, который создает ваш клиент:
Маршрутизация Атрибутов - OData | Microsoft Docs[^]
Herman<T>.Instance
Вы видели мой другой вопрос по этому поводу?
https://www.codeproject.com/Questions/5259132/Odata-v3-v4-issue-on-userdefined-controllers