Herman<T>.Instance Ответов: 0

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&lt;T&gt;.Instance

Я использую подключенные сервисы OData

Richard Deeming

Основываясь на сообщении об ошибке, я подозреваю, что вы используете:
Гитхаб - службы/Службы OData.объем: ODataLib: протоколом открытые данные .Net библиотек и фреймворков[^]

(Прямо или косвенно.)

Похоже, что в этом проекте есть различные проблемы, связанные с фильтрованными операциями "расширения". Я не вижу ничего, что напрямую связано с вашим сообщением об ошибке. Возможно, стоит зарегистрировать там проблему.

Herman&lt;T&gt;.Instance

Я использую протокол V3. Я только что начал обновление до версии v4 и повторил эту проблему. У вас есть
конфиг.Фильтр().Разверните().Выберите().Предложение orderby().MaxTop(null).Рассчитывать();
добавлен

Herman&lt;T&gt;.Instance

Библиотека = Microsoft.aspnet.Службы OData.

Обновление до версии V4 и добавление вложенного фильтра $в $expand не помогло.

Есть еще варианты?

Richard Deeming

Как я уже сказал, вам может понадобиться зарегистрировать проблему в проекте GitHub, чтобы посмотреть, смогут ли они ее исправить.

Herman&lt;T&gt;.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&lt;T&gt;.Instance

Вы видели мой другой вопрос по этому поводу?
https://www.codeproject.com/Questions/5259132/Odata-v3-v4-issue-on-userdefined-controllers

0 Ответов