2010-10-08 17 views
8

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, ''); 

Odpowiedz

14

Wartość GUID musi być sformatowany jak GUID „” - zobacz szczegółowe informacje: http://www.odata.org/developers/protocols/overview#AbstractTypeSystem Nie wiem, co chciał osiągnąć z DataAdapterType.DataAdatperTypeId, ale charakter kropka ma szczególne znaczenie w wyrażenie filtru, więc prawdopodobnie nie robi to, co chciałeś. Jeśli DataAdapters jednostka ma zbiór jednostek typu DataAdapterType, który następnie ma DataAdapterTypeId właściwość, która jest typu GUID, a następnie można filtrować na nią po prostu

DataAdapterTypeId eq guid'<value>' 
+0

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

+0

Nie umieszczaj paretki wokół filtrów $. –

+0

Jeśli chcesz używać dwóch warunków, użyj następującego polecenia: $ filter = Nazwa eq 'foo' i Opis eq 'bar' –

1

Można znaleźć odniesienie konwencja aktualizowane URL here.

1

Z OData v4, co działa dla mnie na ASP.NET jest

'DataAdapterTypeId eq ' + adapterTypeId

przestrzegać żadnych cytatów lub rzuca wokół wartości GUID. Spowoduje to zgłoszenie błędu, jeśli adapterTypeId nie jest identyfikatorem GUID.

Powiązane problemy