Próbuję uzyskać kod działający przy użyciu OData. Poniższy fragment kodu nie działa.Problemy z filtrem OData i polem Guid
ds to OpenDataServiceProxy.
adapterTypeId jest ciągiem reprezentującym Guid.
adapterName jest string name
ds.query('/DataAdapters?$filter=DataAdapterType.DataAdapterTypeId eq guid(\'' + adapterTypeId + '\') and Name eq \'' + adapterName + '\'', ifmgr_CreateAdapter_Step1, onGenericFailure, 'Error');
Powyższa linia daje następujący błąd:
wyrażeń typu 'System.Boolean' oczekiwany w pozycji 0.
Jeśli usunąć sekcja "Guid" filtra, tak, że używa tylko części "Name", działa dobrze.
Pole tabeli DataAdapters "DataAdapterTypeId" jest przypisane za granicą do pola "DataAdapterTypes" DataAdapterTypeId.
Czy ktoś może zauważyć, co robię źle?
------------------- EDIT ----------------------
OK, zmieniłem filtr, jak pokazano poniżej. Nie dostaję już błędu, ale otrzymuję wiele wyników, zamiast jednego rekordu pasującego do filtra. Czy ktoś może powiedzieć, dlaczego nie filtruje?
ds.query('/DataAdapters?($filter=Name eq \'' + adapterName + '\' and $filter=DataAdapterTypeId eq guid\'' + adapterTypeId + '\')', ifmgr_CreateAdapter_Step1, onGenericFailure, '');
Wprowadziłem zalecane zmiany, ale teraz otrzymuję wszystkie rekordy, a nie tylko te, które pasują do filtra. Dodałem szczegóły do mojego pierwotnego pytania. – Retrocoder
Nie umieszczaj paretki wokół filtrów $. –
Jeśli chcesz używać dwóch warunków, użyj następującego polecenia: $ filter = Nazwa eq 'foo' i Opis eq 'bar' –