Проблемы с фильтром OData и полем Guid

Я пытаюсь заставить код работать с использованием OData. Следующий фрагмент кода не работает.

ds - это OpenDataServiceProxy.

adapterTypeId - строковое представление Guid.

имя адаптера - это строковое имя

ds.query('/DataAdapters?$filter=DataAdapterType.DataAdapterTypeId eq guid(\'' + adapterTypeId + '\') and Name eq \'' + adapterName + '\'', ifmgr_CreateAdapter_Step1, onGenericFailure, 'Error');

Вышеупомянутая строка дает следующую ошибку:

Выражение типа System.Boolean ожидается в позиции 0.

Если я удалю раздел Guid фильтра, чтобы он использовал только часть «Name», он будет работать нормально.

Поле таблицы DataAdapters «DataAdapterTypeId» связано внешним ключом с полем DataAdapterTypeId таблицы «DataAdapterTypes».

Может ли кто-нибудь заметить, что я делаю не так?

-------------------РЕДАКТИРОВАТЬ----------------------

Хорошо, я изменил фильтр, как показано ниже. Я больше не получаю сообщение об ошибке, но получаю много результатов, а не одну запись, соответствующую фильтру. Кто-нибудь может сказать, почему не фильтруется?

ds.query('/DataAdapters?($filter=Name eq \'' + adapterName + '\' and $filter=DataAdapterTypeId eq guid\'' + adapterTypeId + '\')', ifmgr_CreateAdapter_Step1, onGenericFailure, '');

person Retrocoder    schedule 08.10.2010    source источник


Ответы (3)


Значение guid должно быть сформировано как guid '' - подробности см. Здесь: http://www.odata.org/developers/protocols/overview#AbstractTypeSystem Не знаю, чего вы хотели достичь с помощью DataAdapterType.DataAdatperTypeId, но символ точки не имеет особого значения в выражении фильтра, поэтому, вероятно, не имеет ' Делай то, что хотел. Если ваш набор сущностей DataAdapters имеет сущности типа DataAdapterType, который затем имеет свойство DataAdapterTypeId, имеющее тип GUID, то вы можете фильтровать его, просто

DataAdapterTypeId eq guid'<value>'
person Vitek Karas MSFT    schedule 09.10.2010
comment
Я внес рекомендованные вами изменения, но теперь я получаю обратно все записи, а не только ту, которая соответствует фильтру. Я добавил подробности к своему исходному вопросу. - person Retrocoder; 11.10.2010
comment
Не помещайте скобки вокруг фильтров $. - person Vitek Karas MSFT; 11.10.2010
comment
Если вы хотите, чтобы два условия использовали что-то вроде: $ filter = Name eq 'foo' и Description eq 'bar' - person Vitek Karas MSFT; 11.10.2010
comment
Синтаксис полностью описан здесь: odata.org/developers/protocols/uri-conventions - person Vitek Karas MSFT; 11.10.2010
comment
@VitekKarasMSFT Кажется, что ни одна из ссылок больше не работает. - person Torben Koch Pløen; 07.11.2014

С OData v4 то, что у меня работает в ASP.NET,

'DataAdapterTypeId eq' + adapterTypeId

Не обращайте внимания на кавычки или приведение значения guid. Это вызовет ошибку, если adapterTypeId не является GUID.

person m0s    schedule 24.09.2016

Вы можете найти обновленную ссылку на соглашение об URL-адресах здесь.

person Stinky Buffalo    schedule 04.03.2015